added grid tool (does not work yet)

actorid
Marc Zinnschlag 11 years ago
parent 3a58da9ad7
commit baf30ba292

@ -60,7 +60,7 @@ opencs_hdrs_noqt (view/doc
opencs_units (view/world opencs_units (view/world
table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator
cellcreator referenceablecreator referencecreator scenesubview scenetoolbar scenetool cellcreator referenceablecreator referencecreator scenesubview scenetoolbar scenetool
scenetoolmode infocreator scriptedit dialoguesubview previewsubview scenetoolmode infocreator scriptedit dialoguesubview previewsubview scenetoolgrid
) )
opencs_units (view/render opencs_units (view/render

@ -18,6 +18,7 @@
#include "creator.hpp" #include "creator.hpp"
#include "scenetoolbar.hpp" #include "scenetoolbar.hpp"
#include "scenetoolmode.hpp" #include "scenetoolmode.hpp"
#include "scenetoolgrid.hpp"
CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document) CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document)
: SubView (id) : SubView (id)
@ -36,6 +37,8 @@ CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::D
SceneToolbar *toolbar = new SceneToolbar (48, this); SceneToolbar *toolbar = new SceneToolbar (48, this);
SceneToolGrid *gridTool = 0;
if (id.getId()=="sys::default") if (id.getId()=="sys::default")
{ {
CSVRender::PagedWorldspaceWidget *widget = new CSVRender::PagedWorldspaceWidget (this); CSVRender::PagedWorldspaceWidget *widget = new CSVRender::PagedWorldspaceWidget (this);
@ -44,6 +47,13 @@ CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::D
SIGNAL (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&)), SIGNAL (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&)),
this, this,
SLOT (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&))); SLOT (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&)));
gridTool = new SceneToolGrid (toolbar);
connect (widget,
SIGNAL (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&)),
gridTool,
SLOT (cellIndexChanged (const std::pair<int, int>&, const std::pair<int, int>&)));
} }
else else
mScene = new CSVRender::UnpagedWorldspaceWidget (id.getId(), document, this); mScene = new CSVRender::UnpagedWorldspaceWidget (id.getId(), document, this);
@ -54,6 +64,9 @@ CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::D
SceneToolMode *lightingTool = mScene->makeLightingSelector (toolbar); SceneToolMode *lightingTool = mScene->makeLightingSelector (toolbar);
toolbar->addTool (lightingTool); toolbar->addTool (lightingTool);
if (gridTool)
toolbar->addTool (gridTool);
layout2->addWidget (toolbar, 0); layout2->addWidget (toolbar, 0);
layout2->addWidget (mScene, 1); layout2->addWidget (mScene, 1);

@ -0,0 +1,75 @@
#include "scenetoolgrid.hpp"
#include <sstream>
#include <QPainter>
#include <QApplication>
#include <QFontMetrics>
#include "scenetoolbar.hpp"
CSVWorld::SceneToolGrid::SceneToolGrid (SceneToolbar *parent)
: SceneTool (parent), mIconSize (parent->getIconSize())
{
}
void CSVWorld::SceneToolGrid::showPanel (const QPoint& position)
{
}
void CSVWorld::SceneToolGrid::cellIndexChanged (const std::pair<int, int>& min,
const std::pair<int, int>& max)
{
/// \todo make font size configurable
const int fontSize = 8;
/// \todo replace with proper icon
QPixmap image (mIconSize, mIconSize);
image.fill (QColor (0, 0, 0, 0));
{
QPainter painter (&image);
painter.setPen (Qt::black);
QFont font (QApplication::font().family(), fontSize);
painter.setFont (font);
QFontMetrics metrics (font);
if (min==max)
{
// single cell
std::ostringstream stream;
stream << min.first << ", " << min.second;
QString text = QString::fromUtf8 (stream.str().c_str());
painter.drawText (QPoint ((mIconSize-metrics.width (text))/2, mIconSize/2+fontSize/2),
text);
}
else
{
// range
{
std::ostringstream stream;
stream << min.first << ", " << min.second;
painter.drawText (QPoint (0, mIconSize),
QString::fromUtf8 (stream.str().c_str()));
}
{
std::ostringstream stream;
stream << max.first << ", " << max.second;
QString text = QString::fromUtf8 (stream.str().c_str());
painter.drawText (QPoint (mIconSize-metrics.width (text), fontSize), text);
}
}
}
QIcon icon (image);
setIcon (icon);
}

@ -0,0 +1,29 @@
#ifndef CSV_WORLD_SCENETOOL_GRID_H
#define CSV_WORLD_SCENETOOL_GRID_H
#include "scenetool.hpp"
namespace CSVWorld
{
class SceneToolbar;
///< \brief Cell grid selector tool
class SceneToolGrid : public SceneTool
{
Q_OBJECT
int mIconSize;
public:
SceneToolGrid (SceneToolbar *parent);
virtual void showPanel (const QPoint& position);
public slots:
void cellIndexChanged (const std::pair<int, int>& min, const std::pair<int, int>& max);
};
}
#endif
Loading…
Cancel
Save