Added: #1301 Added pixmap database

--HG--
branch : gsoc2011-worldeditorqt
This commit is contained in:
dnk-88 2011-06-02 16:57:10 +03:00
parent 90ae61996e
commit 92e553802a
16 changed files with 962 additions and 3 deletions

View file

@ -11,9 +11,13 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_HDR landscape_editor_plugin.h
landscape_editor_window.h
landscape_scene.h
zone_list_model.h
zone_list_widget.h
)
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS landscape_editor_window.ui
zone_list_widget.ui
)
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_RCS landscape_editor.qrc)
@ -37,7 +41,7 @@ ADD_LIBRARY(ovqt_plugin_landscape_editor MODULE ${SRC}
${OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS}
${OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS})
TARGET_LINK_LIBRARIES(ovqt_plugin_landscape_editor ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY})
TARGET_LINK_LIBRARIES(ovqt_plugin_landscape_editor ovqt_plugin_core nelmisc nel3d nelgeorges nelligo ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY})
NL_DEFAULT_PROPS(ovqt_plugin_landscape_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Landscape Editor")
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_landscape_editor)

View file

@ -0,0 +1,104 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "builder_zone.h"
#include "zone_list_model.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
#include <QtCore/QDir>
#include <QtGui/QMessageBox>
namespace LandscapeEditor
{
ZoneBuilder::ZoneBuilder()
: m_zoneListModel(0)
{
m_zoneListModel = new ZoneListModel();
m_lastPathName = "";
}
ZoneBuilder::~ZoneBuilder()
{
delete m_zoneListModel;
}
bool ZoneBuilder::init(const QString &pathName, bool makeAZone)
{
bool bRet = true;
if (pathName != m_lastPathName)
{
m_lastPathName = pathName;
QString zoneBankPath = pathName;
zoneBankPath += "/zoneligos/";
// Init the ZoneBank
m_zoneBank.reset ();
if (!initZoneBank (zoneBankPath))
{
m_zoneBank.reset ();
return false;
}
// Construct the DataBase from the ZoneBank
QString zoneBitmapPath = pathName;
zoneBitmapPath += "/zonebitmaps/";
m_zoneListModel->resetModel();
if (!m_zoneListModel->rebuildModel(zoneBitmapPath, m_zoneBank))
{
m_zoneBank.reset();
return false;
}
}
if ((makeAZone) && (bRet))
newZone();
return bRet;
}
bool ZoneBuilder::initZoneBank (const QString &pathName)
{
QDir *dir = new QDir(pathName);
QStringList filters;
filters << "*.ligozone";
// Find all ligozone files in dir
QStringList listFiles = dir->entryList(filters, QDir::Files);
std::string error;
Q_FOREACH(QString file, listFiles)
{
//nlinfo(file.toStdString().c_str());
if (!m_zoneBank.addElement((pathName + file).toStdString(), error))
QMessageBox::critical(0, QObject::tr("Landscape editor"), QString(error.c_str()), QMessageBox::Ok);
}
return true;
}
ZoneListModel *ZoneBuilder::zoneModel() const
{
return m_zoneListModel;
}
void ZoneBuilder::newZone (bool bDisplay)
{
}
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,75 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef BUILDER_ZONE_H
#define BUILDER_ZONE_H
// Project includes
// NeL includes
#include <nel/ligo/zone_bank.h>
// STL includes
#include <string>
#include <vector>
// Qt includes
#include <QtCore/QString>
namespace LandscapeEditor
{
class ZoneListModel;
/**
@class ZoneBuilder
@brief ZoneBuilder contains all the shared data between the tools and the engine
@details ZoneBank contains the macro zones that is composed of several zones plus a mask
ZoneListModel contains the graphics for the zones
*/
class ZoneBuilder
{
public:
ZoneBuilder();
~ZoneBuilder();
// Init zoneBank and init zone pixmap database
bool init(const QString &pathName, bool bMakeAZone);
void newZone(bool bDisplay=true);
// Accessors
NLLIGO::CZoneBank &getZoneBank()
{
return m_zoneBank;
}
ZoneListModel *zoneModel() const;
private:
// Scan ./zoneligos dir and add all *.ligozone files to zoneBank
bool initZoneBank (const QString &path);
sint32 m_minX, m_maxX, m_minY, m_maxY;
QString m_lastPathName;
ZoneListModel *m_zoneListModel;
NLLIGO::CZoneBank m_zoneBank;
std::vector<NLLIGO::CZoneBankElement*> m_currentSelection;
};
} /* namespace LandscapeEditor */
#endif // BUILDER_ZONE_H

View file

@ -0,0 +1,28 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "builder_zone_region.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
namespace LandscapeEditor
{
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,33 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef BUILDER_ZONE_REGION_H
#define BUILDER_ZONE_REGION_H
// Project includes
// NeL includes
#include <nel/ligo/zone_bank.h>
// Qt includes
namespace LandscapeEditor
{
} /* namespace LandscapeEditor */
#endif // BUILDER_ZONE_REGION_H

View file

@ -91,7 +91,7 @@ public:
}
virtual QIcon icon() const
{
return QIcon();
return QIcon(Constants::ICON_LANDSCAPE_ITEM);
}
virtual void open();

View file

@ -18,6 +18,7 @@
// Project includes
#include "landscape_editor_window.h"
#include "landscape_editor_constants.h"
#include "zone_list_model.h"
#include "../core/icore.h"
#include "../core/imenu_manager.h"
@ -40,7 +41,11 @@ LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent)
m_ui.setupUi(this);
m_undoStack = new QUndoStack(this);
/*
m_zoneBuilder = new ZoneBuilder();
m_zoneBuilder->init("e:/-nel-/install/continents/newbieland", false);
m_ui.zoneListWidget->setModel(m_zoneBuilder->zoneModel());
*/
createMenus();
readSettings();
}

View file

@ -20,6 +20,7 @@
// Project includes
#include "ui_landscape_editor_window.h"
#include "builder_zone.h"
// Qt includes
#include <QtGui/QUndoStack>
@ -47,6 +48,7 @@ private:
void readSettings();
void writeSettings();
ZoneBuilder *m_zoneBuilder;
QUndoStack *m_undoStack;
Ui::LandscapeEditorWindow m_ui;
}; /* class LandscapeEditorWindow */

View file

@ -35,7 +35,24 @@
<bool>false</bool>
</attribute>
</widget>
<widget class="QDockWidget" name="dockWidget">
<property name="windowTitle">
<string>Zones</string>
</property>
<attribute name="dockWidgetArea">
<number>2</number>
</attribute>
<widget class="LandscapeEditor::ZoneListWidget" name="zoneListWidget"/>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>LandscapeEditor::ZoneListWidget</class>
<extends>QWidget</extends>
<header>zone_list_widget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="landscape_editor.qrc"/>
</resources>

View file

@ -0,0 +1,38 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "landscape_scene.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
namespace LandscapeEditor
{
LandscapeScene::LandscapeScene(QObject *parent)
: QGraphicsScene(parent)
{
}
LandscapeScene::~LandscapeScene()
{
}
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,42 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef LANDSCAPE_SCENE_H
#define LANDSCAPE_SCENE_H
// Project includes
// NeL includes
// Qt includes
#include <QGraphicsScene>
namespace LandscapeEditor
{
class LandscapeScene : public QGraphicsScene
{
Q_OBJECT
public:
LandscapeScene(QObject *parent = 0);
virtual ~LandscapeScene();
};
} /* namespace LandscapeEditor */
#endif // LANDSCAPE_SCENE_H

View file

@ -0,0 +1,165 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "zone_list_model.h"
// NeL includes
#include <nel/misc/debug.h>
// STL includes
#include <string>
#include <vector>
// Qt includes
#include <QApplication>
#include <QSize>
#include <QtGui/QProgressDialog>
namespace LandscapeEditor
{
ZoneListModel::ZoneListModel(int pixmapSize, QObject *parent)
: QAbstractListModel(parent),
m_pixmapSize(pixmapSize)
{
}
ZoneListModel::~ZoneListModel()
{
resetModel();
}
int ZoneListModel::rowCount(const QModelIndex & /* parent */) const
{
return m_pixmapMap.count();
}
int ZoneListModel::columnCount(const QModelIndex & /* parent */) const
{
return 1;
}
QVariant ZoneListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::TextAlignmentRole)
{
return int(Qt::AlignLeft | Qt::AlignVCenter);
}
else if (role == Qt::DisplayRole)
{
return m_pixmapNameList.at(index.row());
}
else if (role == Qt::DecorationRole)
{
QPixmap *pixmap = getSmallPixmap(m_pixmapNameList.at(index.row()));
return qVariantFromValue(*pixmap);
}
return QVariant();
}
QVariant ZoneListModel::headerData(int section,
Qt::Orientation /* orientation */,
int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
return QVariant();
}
void ZoneListModel::setSmallPixmapSize(int pixmapSize)
{
m_pixmapSize = pixmapSize;
}
void ZoneListModel::resetModel()
{
beginResetModel();
Q_FOREACH(QString name, m_pixmapNameList)
{
QPixmap *pixmap = m_pixmapMap.value(name);
delete pixmap;
QPixmap *smallPixmap = m_smallPixmapMap.value(name);
delete smallPixmap;
}
m_pixmapMap.clear();
m_pixmapNameList.clear();
m_smallPixmapMap.clear();
endResetModel();
}
bool ZoneListModel::rebuildModel(const QString &zonePath, NLLIGO::CZoneBank &zoneBank)
{
beginResetModel();
m_zonePath = zonePath;
QProgressDialog *progressDialog = new QProgressDialog();
std::vector<std::string> zoneNames;
zoneBank.getCategoryValues ("zone", zoneNames);
progressDialog->setRange(0, zoneNames.size());
for (uint i = 0; i < zoneNames.size(); ++i)
{
QApplication::processEvents();
progressDialog->setValue(i);
NLLIGO::CZoneBankElement *zoneBankItem = zoneBank.getElementByZoneName (zoneNames[i]);
// Read the texture file
QString zonePixmapName(zoneNames[i].c_str());
uint8 sizeX = zoneBankItem->getSizeX();
uint8 sizeY = zoneBankItem->getSizeY();
const std::vector<bool> &rMask = zoneBankItem->getMask();
QPixmap *pixmap = new QPixmap(zonePath + zonePixmapName + ".png");
QPixmap *smallPixmap = new QPixmap(pixmap->scaled(m_pixmapSize * sizeX, m_pixmapSize * sizeY));
m_pixmapMap.insert(zonePixmapName, pixmap);
m_smallPixmapMap.insert(zonePixmapName, smallPixmap);
}
m_pixmapNameList = m_pixmapMap.keys();
endResetModel();
delete progressDialog;
return false;
}
QPixmap *ZoneListModel::getPixmap(const QString &zoneName) const
{
QPixmap *result = 0;
if (!m_pixmapMap.contains(zoneName))
nlwarning("QPixmap %s not found", zoneName.toStdString().c_str());
else
result = m_pixmapMap.value(zoneName);
return result;
}
QPixmap *ZoneListModel::getSmallPixmap(const QString &zoneName) const
{
QPixmap *result = 0;
if (!m_pixmapMap.contains(zoneName))
nlwarning("QPixmap %s not found", zoneName.toStdString().c_str());
else
result = m_smallPixmapMap.value(zoneName);
return result;
}
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,82 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef ZONE_LIST_MODEL_H
#define ZONE_LIST_MODEL_H
// Project includes
// NeL includes
#include <nel/ligo/zone_bank.h>
// Qt includes
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtGui/QPixmap>
#include <QAbstractListModel>
namespace LandscapeEditor
{
/**
@class ZoneListModel
@brief ZoneListModel contains the image database for QGraphicsScene and
small images for QListView
@details
*/
class ZoneListModel : public QAbstractListModel
{
Q_OBJECT
public:
ZoneListModel(int pixmapSize = 64, QObject *parent = 0);
~ZoneListModel();
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role) const;
/// Set size for small pixmaps
/// Value should be set before calling rebuildModel
void setSmallPixmapSize(int pixmapSize);
/// Unload all images and reset model
void resetModel();
/// Load all images(png) from zonePath, list images gets from zoneBank
bool rebuildModel(const QString &zonePath, NLLIGO::CZoneBank &zoneBank);
/// Get original pixmap
/// @return QPixmap* if the image is in the database ; otherwise returns 0.
QPixmap *getPixmap(const QString &zoneName) const;
/// Get scaled pixmap (pixmapSize * zoneSize.sizeX, pixmapSize * zoneSize.sizeY)
/// @return QPixmap* if the image is in the database ; otherwise returns 0.
QPixmap *getSmallPixmap(const QString &zoneName) const;
private:
QString m_zonePath;
int m_pixmapSize;
QMap<QString, QPixmap*> m_pixmapMap;
QMap<QString, QPixmap*> m_smallPixmapMap;
QList<QString> m_pixmapNameList;
};
} /* namespace LandscapeEditor */
#endif // ZONE_LIST_MODEL_H

View file

@ -0,0 +1,44 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "zone_list_widget.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
namespace LandscapeEditor
{
ZoneListWidget::ZoneListWidget(QWidget *parent)
: QWidget(parent)
{
m_ui.setupUi(this);
}
ZoneListWidget::~ZoneListWidget()
{
}
void ZoneListWidget::setModel(QAbstractItemModel *model)
{
m_ui.listView->setModel(model);
}
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,54 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef ZONE_LIST_WIDGET_H
#define ZONE_LIST_WIDGET_H
// Project includes
#include "ui_zone_list_widget.h"
// NeL includes
// Qt includes
namespace LandscapeEditor
{
/**
@class ZoneListWidget
@brief ZoneListWidget
@details
*/
class ZoneListWidget: public QWidget
{
Q_OBJECT
public:
ZoneListWidget(QWidget *parent = 0);
~ZoneListWidget();
void setModel(QAbstractItemModel *model);
Q_SIGNALS:
public Q_SLOTS:
private Q_SLOTS:
private:
Ui::ZoneListWidget m_ui;
}; /* ZoneListWidget */
} /* namespace LandscapeEditor */
#endif // ZONE_LIST_WIDGET_H

View file

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ZoneListWidget</class>
<widget class="QWidget" name="ZoneListWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>359</width>
<height>579</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<property name="margin">
<number>3</number>
</property>
<property name="spacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Filter</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="margin">
<number>6</number>
</property>
<property name="spacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QComboBox" name="comboBox_3">
<item>
<property name="text">
<string>&lt;Unused&gt;</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_7"/>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="comboBox_11">
<item>
<property name="text">
<string>Random</string>
</property>
</item>
<item>
<property name="text">
<string>Fyll cycle</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="comboBox_6">
<property name="enabled">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>&lt;Unused&gt;</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBox_8">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="comboBox_12">
<property name="enabled">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>And</string>
</property>
</item>
<item>
<property name="text">
<string>Or</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QComboBox" name="comboBox_4">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>&lt;Unused&gt;</string>
</property>
</item>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_9">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QComboBox" name="comboBox_13">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>And</string>
</property>
</item>
<item>
<property name="text">
<string>Or</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QComboBox" name="comboBox_5">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>&lt;Unused&gt;</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBox_10">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QComboBox" name="comboBox_14">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>And</string>
</property>
</item>
<item>
<property name="text">
<string>Or</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Placement</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>6</number>
</property>
<property name="spacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QComboBox" name="comboBox">
<item>
<property name="text">
<string>0°</string>
</property>
</item>
<item>
<property name="text">
<string>90°</string>
</property>
</item>
<item>
<property name="text">
<string>180°</string>
</property>
</item>
<item>
<property name="text">
<string>170°</string>
</property>
</item>
<item>
<property name="text">
<string>Random</string>
</property>
</item>
<item>
<property name="text">
<string>Full cycle</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_2">
<item>
<property name="text">
<string>NoFlip</string>
</property>
</item>
<item>
<property name="text">
<string>Flip</string>
</property>
</item>
<item>
<property name="text">
<string>Random</string>
</property>
</item>
<item>
<property name="text">
<string>Fyll cycle</string>
</property>
</item>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Force</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>Not propogate</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QListView" name="listView"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>