mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 20:53:50 +00:00
added grid tool (does not work yet)
This commit is contained in:
parent
3a58da9ad7
commit
baf30ba292
4 changed files with 118 additions and 1 deletions
|
@ -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);
|
||||||
|
|
75
apps/opencs/view/world/scenetoolgrid.cpp
Normal file
75
apps/opencs/view/world/scenetoolgrid.cpp
Normal file
|
@ -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);
|
||||||
|
}
|
29
apps/opencs/view/world/scenetoolgrid.hpp
Normal file
29
apps/opencs/view/world/scenetoolgrid.hpp
Normal file
|
@ -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…
Reference in a new issue