LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
CadMdiChild Class Reference

#include <cadmdichild.h>

Inheritance diagram for CadMdiChild:
Collaboration diagram for CadMdiChild:

Public Slots

void ctxMenu (const QPoint &pos)
 

Signals

void keyPressed (QKeyEvent *event)
 

Public Member Functions

 CadMdiChild (QWidget *parent=0)
 
 ~CadMdiChild ()
 
void newDocument ()
 Create a new document. More...
 
bool openFile ()
 Load existing file. More...
 
void setDestroyCallback (LuaIntf::LuaRef callback)
 Give function to call when window is destroyed. More...
 
void keyPressEvent (QKeyEvent *event)
 
QWidget * view () const
 
std::shared_ptr< lc::Document > document () const
 
lc::UndoManager_SPtr undoManager () const
 
LCViewer::SnapManager_SPtr snapManager () const
 
lc::StorageManager_SPtr storageManager () const
 
LCViewer::LCADViewerviewer () const
 
std::shared_ptr< LCViewer::Cursor > cursor () const
 
lc::Layer_CSPtr activeLayer () const
 Get the selected layer. More...
 
void setActiveLayer (const lc::Layer_CSPtr &activeLayer)
 
lc::ui::MetaInfoManager_SPtr metaInfoManager () const
 Get the MetaInfo manager. More...
 
LCViewer::TempEntities_SPtr tempEntities ()
 Get container of temporary entities. More...
 
std::vector
< lc::entity::CADEntity_CSPtr > 
selection ()
 Get selected entities. More...
 
void saveFile ()
 
unsigned int id ()
 Get window ID. More...
 
void setId (unsigned int id)
 Set window ID. More...
 
const
LCViewer::SnapManagerImpl_SPtr & 
getSnapManager () const
 

Private Attributes

unsigned int _id
 
LuaIntf::LuaRef _destroyCallback
 
std::shared_ptr< lc::Document > _document
 
lc::UndoManagerImpl_SPtr _undoManager
 
std::shared_ptr< LCViewer::Grid > _grid
 
std::shared_ptr
< LCViewer::GradientBackground > 
_gradientBackground
 
std::shared_ptr< LCViewer::Cursor > _cursor
 
LCViewer::SnapManagerImpl_SPtr _snapManager
 
LCViewer::DragManager_SPtr _dragManager
 
LCViewer::DragPoints_SPtr _dragPoints
 
lc::StorageManager_SPtr _storageManager
 
LCViewer::TempEntities_SPtr _tempEntities
 
lc::Layer_CSPtr _activeLayer
 
lc::ui::MetaInfoManager_SPtr _metaInfoManager
 
QScrollBar * horizontalScrollBar
 
QScrollBar * verticalScrollBar
 
LCViewer::LCADViewer_viewer
 

Detailed Description

Definition at line 34 of file cadmdichild.h.

Constructor & Destructor Documentation

CadMdiChild::CadMdiChild ( QWidget *  parent = 0)
explicit

Definition at line 17 of file cadmdichild.cpp.

17  :
18  QWidget(parent),
19  _activeLayer(nullptr) {
20 
21  if (this->objectName().isEmpty()) {
22  this->setObjectName(QStringLiteral("CadMdiChild"));
23  }
24 
25  this->resize(1078, 736);
26 
27  QGridLayout* gridLayout = new QGridLayout(this);
28  gridLayout->setHorizontalSpacing(0);
29  gridLayout->setVerticalSpacing(0);
30  gridLayout->setObjectName(QStringLiteral("gridLayout"));
31  gridLayout->setContentsMargins(0, 0, 0, 0);
32  horizontalScrollBar = new QScrollBar(this);
33  horizontalScrollBar->setObjectName(QStringLiteral("horizontalScrollBar"));
34  horizontalScrollBar->setOrientation(Qt::Horizontal);
35 
36  gridLayout->addWidget(horizontalScrollBar, 1, 0, 1, 1);
37 
38  verticalScrollBar = new QScrollBar(this);
39  verticalScrollBar->setObjectName(QStringLiteral("verticalScrollBar"));
40  verticalScrollBar->setOrientation(Qt::Vertical);
41 
42  gridLayout->addWidget(verticalScrollBar, 0, 1, 1, 1);
43 
44  _viewer = new LCADViewer(this);
45  _viewer->setObjectName(QStringLiteral("viewer"));
46  _viewer->setGeometry(QRect(50, 30, 581, 401));
47  _viewer->setAutoFillBackground(true);
48  _viewer->setContextMenuPolicy(Qt::CustomContextMenu);
49  _viewer->setFocusPolicy(Qt::StrongFocus);
50  connect(_viewer, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ctxMenu(const QPoint&)));
51 
52  gridLayout->addWidget(_viewer, 0, 0, 1, 1);
53 
54  horizontalScrollBar->setMinimum(-1000);
55  horizontalScrollBar->setMaximum(1000);
56  verticalScrollBar->setMinimum(-1000);
57  verticalScrollBar->setMaximum(1000);
58 
59  _metaInfoManager = std::make_shared<lc::ui::MetaInfoManager>();
60 
61  connect(horizontalScrollBar, SIGNAL(valueChanged(int)),
62  _viewer, SLOT(setHorizontalOffset(int)));
63  connect(verticalScrollBar, SIGNAL(valueChanged(int)),
64  _viewer, SLOT(setVerticalOffset(int)));
65 }
QScrollBar * verticalScrollBar
Definition: cadmdichild.h:144
QScrollBar * horizontalScrollBar
Definition: cadmdichild.h:143
lc::ui::MetaInfoManager_SPtr _metaInfoManager
Definition: cadmdichild.h:141
lc::Layer_CSPtr _activeLayer
Definition: cadmdichild.h:140
LCViewer::LCADViewer * _viewer
Definition: cadmdichild.h:146
void ctxMenu(const QPoint &pos)
CadMdiChild::~CadMdiChild ( )

Definition at line 67 of file cadmdichild.cpp.

67  {
68  if(_destroyCallback) {
70  }
71 }
unsigned int _id
Definition: cadmdichild.h:123
LuaIntf::LuaRef _destroyCallback
Definition: cadmdichild.h:125

Member Function Documentation

lc::Layer_CSPtr CadMdiChild::activeLayer ( ) const

Get the selected layer.

Returns
Selected layer

Definition at line 229 of file cadmdichild.cpp.

229  {
230  return _activeLayer;
231 }
lc::Layer_CSPtr _activeLayer
Definition: cadmdichild.h:140
void CadMdiChild::ctxMenu ( const QPoint &  pos)
slot

Definition at line 180 of file cadmdichild.cpp.

180  {
181  QMenu* menu = new QMenu;
182  menu->addAction(tr("Test Item"), this, SLOT(test_slot()));
183  menu->exec(_viewer->mapToGlobal(pos));
184 }
LCViewer::LCADViewer * _viewer
Definition: cadmdichild.h:146
std::shared_ptr< LCViewer::Cursor > CadMdiChild::cursor ( ) const

Definition at line 201 of file cadmdichild.cpp.

201  {
202  return _cursor;
203 }
std::shared_ptr< LCViewer::Cursor > _cursor
Definition: cadmdichild.h:132
std::shared_ptr< lc::Document > CadMdiChild::document ( ) const

Definition at line 190 of file cadmdichild.cpp.

190  {
191  return _document;
192 }
std::shared_ptr< lc::Document > _document
Definition: cadmdichild.h:127
const SnapManagerImpl_SPtr & CadMdiChild::getSnapManager ( ) const

Definition at line 241 of file cadmdichild.cpp.

241  {
242  return _snapManager;
243 }
LCViewer::SnapManagerImpl_SPtr _snapManager
Definition: cadmdichild.h:133
unsigned int CadMdiChild::id ( )

Get window ID.

Returns
Window ID This is used by Lua to distinguish the different windows.

Definition at line 205 of file cadmdichild.cpp.

205  {
206  return _id;
207 }
unsigned int _id
Definition: cadmdichild.h:123
void CadMdiChild::keyPressed ( QKeyEvent *  event)
signal
void CadMdiChild::keyPressEvent ( QKeyEvent *  event)

Definition at line 216 of file cadmdichild.cpp.

216  {
217  QWidget::keyPressEvent(event);
218  emit keyPressed(event);
219 }
void keyPressed(QKeyEvent *event)
lc::ui::MetaInfoManager_SPtr CadMdiChild::metaInfoManager ( ) const

Get the MetaInfo manager.

Returns
MetaInfoManager

Definition at line 237 of file cadmdichild.cpp.

237  {
238  return _metaInfoManager;
239 }
lc::ui::MetaInfoManager_SPtr _metaInfoManager
Definition: cadmdichild.h:141
void CadMdiChild::newDocument ( )

Create a new document.

Definition at line 74 of file cadmdichild.cpp.

74  {
75  // Entity manager add's/removes entities to layers
76  _storageManager = std::make_shared<lc::StorageManagerImpl>();
77 
78  // Create a new document with required objects, all objects that are required needs to be passed into the constructor
79  _document = std::make_shared<lc::DocumentImpl>(_storageManager);
80 
81  // Add the document to a LibreCAD Viewer system so we can visualize the document
82  _viewer->setDocument(_document);
83 
84  _gradientBackground = std::make_shared<GradientBackground>(lc::Color(0x07, 0x15, 0x11), lc::Color(0x06, 0x35, 0x06));
85  _viewer->documentCanvas()->background().connect<GradientBackground, &GradientBackground::draw>(_gradientBackground.get());
86  _grid = std::make_shared<Grid>(20, lc::Color(0x40, 0x48, 0x40), lc::Color(0x80, 0x90, 0x80));
87  _viewer->documentCanvas()->background().connect<Grid, &Grid::draw>(_grid.get());
88 
89  // Snap manager
90  _snapManager = std::make_shared<SnapManagerImpl>(_viewer->documentCanvas(), _grid, 25.);
91  _viewer->setSnapManager(_snapManager);
92 
93  // Add a cursor manager, Cursor will decide the ultimate position of clicked objects
94  _cursor = std::make_shared<LCViewer::Cursor>(40, _viewer->documentCanvas(), lc::Color(0xff, 0x00, 0x00), lc::Color(0x00, 0xff, 0x00));
95  _viewer->documentCanvas()->foreground().connect<LCViewer::Cursor, &LCViewer::Cursor::onDraw>(_cursor.get());
96  _snapManager->snapPointEvents().connect<LCViewer::Cursor, &LCViewer::Cursor::onSnapPointEvent>(_cursor.get());
97 
98  _tempEntities = std::make_shared<TempEntities>(_viewer->documentCanvas());
99  _viewer->documentCanvas()->foreground().connect<LCViewer::TempEntities, &LCViewer::TempEntities::onDraw>(_tempEntities.get());
100 
101  //Drag manager
102  _dragManager = std::make_shared<DragManager>(_viewer->documentCanvas(), _cursor, _tempEntities, 10);
103  _viewer->setDragManager(_dragManager);
104 
105  _dragPoints = std::make_shared<LCViewer::DragPoints>();
106  _dragManager->dragPointsEvent().connect<LCViewer::DragPoints, &LCViewer::DragPoints::setPoints>(_dragPoints.get());
107  _viewer->documentCanvas()->foreground().connect<LCViewer::DragPoints, &LCViewer::DragPoints::onDraw>(_dragPoints.get());
108 
109  // Undo manager takes care that we can undo/redo entities within a document
110  _undoManager = std::make_shared<lc::UndoManagerImpl>(10);
111  _document->commitProcessEvent().connect<lc::UndoManagerImpl, &lc::UndoManagerImpl::on_CommitProcessEvent>(_undoManager.get());
112 
113  _activeLayer = _document->layerByName("0");
114 }
std::shared_ptr< LCViewer::Grid > _grid
Definition: cadmdichild.h:130
std::shared_ptr< LCViewer::GradientBackground > _gradientBackground
Definition: cadmdichild.h:131
LCViewer::TempEntities_SPtr _tempEntities
Definition: cadmdichild.h:138
std::shared_ptr< lc::Document > _document
Definition: cadmdichild.h:127
void setDocument(std::shared_ptr< lc::Document > document)
Definition: lcadviewer.cpp:30
void setDragManager(DragManager_SPtr dragManager)
Definition: lcadviewer.cpp:48
LCViewer::DragPoints_SPtr _dragPoints
Definition: cadmdichild.h:136
LCViewer::SnapManagerImpl_SPtr _snapManager
Definition: cadmdichild.h:133
lc::Layer_CSPtr _activeLayer
Definition: cadmdichild.h:140
void setSnapManager(std::shared_ptr< SnapManager > snapmanager)
Definition: lcadviewer.cpp:44
LCViewer::DragManager_SPtr _dragManager
Definition: cadmdichild.h:135
std::shared_ptr< LCViewer::Cursor > _cursor
Definition: cadmdichild.h:132
LCViewer::LCADViewer * _viewer
Definition: cadmdichild.h:146
std::shared_ptr< DocumentCanvas > documentCanvas() const
Definition: lcadviewer.cpp:242
lc::StorageManager_SPtr _storageManager
Definition: cadmdichild.h:137
lc::UndoManagerImpl_SPtr _undoManager
Definition: cadmdichild.h:128
bool CadMdiChild::openFile ( )

Load existing file.

Parameters
pathPath to file
Returns
bool True if the file was correctly opened, false otherwise.

Definition at line 117 of file cadmdichild.cpp.

117  {
118  auto file = QFileDialog::getOpenFileName();
119 
120  if(file == "") {
121  return false;
122  }
123 
124  auto fileInfo = QFileInfo(file);
125 
126  auto ext = fileInfo.suffix().toStdString();
127  auto availableLibraries = lc::File::getAvailableLibrariesForFormat(ext);
128 
129  if(availableLibraries.size() > 0) {
130  //TODO: if more than once, ask which one to choose
131  newDocument();
132  lc::File::open(_document, file.toStdString(), availableLibraries.begin()->first);
133  }
134  else {
135  QMessageBox::critical(nullptr, "Open error", "Unknown file extension ." + fileInfo.suffix());
136  return false;
137  }
138 
139  return true;
140 }
std::shared_ptr< lc::Document > _document
Definition: cadmdichild.h:127
void newDocument()
Create a new document.
Definition: cadmdichild.cpp:74
void CadMdiChild::saveFile ( )

Definition at line 143 of file cadmdichild.cpp.

143  {
144  QString filterList;
145  QString selectedFilter;
146  lc::File::Type type;
147  auto availableTypes = lc::File::getAvailableFileTypes();
148 
149  if(availableTypes.size() == 0) {
150  QMessageBox::critical(nullptr, "Save error", "No library available for file saving.");
151  return;
152  }
153 
154  auto it = availableTypes.begin();
155  type = it->first;
156  filterList = it->second.c_str();
157  it++;
158 
159  while(it != availableTypes.end()) {
160  filterList += ";;";
161  filterList += it->second.c_str();
162 
163  it++;
164  }
165 
166  auto file = QFileDialog::getSaveFileName(nullptr, "Save file", "", filterList, &selectedFilter);
167 
168  auto selectedType = selectedFilter.toStdString();
169 
170  for(auto availableType : availableTypes) {
171  if(selectedType == availableType.second) {
172  type = availableType.first;
173  break;
174  }
175  }
176 
177  lc::File::save(_document, file.toStdString(), type);
178 }
std::shared_ptr< lc::Document > _document
Definition: cadmdichild.h:127
std::vector< lc::entity::CADEntity_CSPtr > CadMdiChild::selection ( )

Get selected entities.

Returns
Selected entities Return a vector of selected entities. This function was added for Lua which can't access EntityContainer functions

Definition at line 225 of file cadmdichild.cpp.

225  {
226  return viewer()->documentCanvas()->selectedEntities().asVector();
227 }
LCViewer::LCADViewer * viewer() const
Definition: cadmdichild.h:73
std::shared_ptr< DocumentCanvas > documentCanvas() const
Definition: lcadviewer.cpp:242
void CadMdiChild::setActiveLayer ( const lc::Layer_CSPtr &  activeLayer)

Definition at line 233 of file cadmdichild.cpp.

233  {
235 }
lc::Layer_CSPtr _activeLayer
Definition: cadmdichild.h:140
lc::Layer_CSPtr activeLayer() const
Get the selected layer.
void CadMdiChild::setDestroyCallback ( LuaIntf::LuaRef  callback)

Give function to call when window is destroyed.

Parameters
callbackLua function

Definition at line 212 of file cadmdichild.cpp.

212  {
213  _destroyCallback = destroyCallback;
214 }
LuaIntf::LuaRef _destroyCallback
Definition: cadmdichild.h:125
void CadMdiChild::setId ( unsigned int  id)

Set window ID.

Parameters
idWindow ID This is used by Lua to distinguish the different windows. This function should not be used.

Definition at line 208 of file cadmdichild.cpp.

208  {
209  _id = id;
210 }
unsigned int _id
Definition: cadmdichild.h:123
unsigned int id()
Get window ID.
SnapManager_SPtr CadMdiChild::snapManager ( ) const

Definition at line 186 of file cadmdichild.cpp.

186  {
187  return _snapManager;
188 }
LCViewer::SnapManagerImpl_SPtr _snapManager
Definition: cadmdichild.h:133
lc::StorageManager_SPtr CadMdiChild::storageManager ( ) const

Definition at line 194 of file cadmdichild.cpp.

194  {
195  return _storageManager;
196 }
lc::StorageManager_SPtr _storageManager
Definition: cadmdichild.h:137
LCViewer::TempEntities_SPtr CadMdiChild::tempEntities ( )

Get container of temporary entities.

Returns
Temporary entities container

Definition at line 221 of file cadmdichild.cpp.

221  {
222  return _tempEntities;
223 }
LCViewer::TempEntities_SPtr _tempEntities
Definition: cadmdichild.h:138
lc::UndoManager_SPtr CadMdiChild::undoManager ( ) const

Definition at line 197 of file cadmdichild.cpp.

197  {
198  return _undoManager;
199 }
lc::UndoManagerImpl_SPtr _undoManager
Definition: cadmdichild.h:128
QWidget* CadMdiChild::view ( ) const
LCViewer::LCADViewer* CadMdiChild::viewer ( ) const
inline

Definition at line 73 of file cadmdichild.h.

73 {return _viewer;}
LCViewer::LCADViewer * _viewer
Definition: cadmdichild.h:146

Member Data Documentation

lc::Layer_CSPtr CadMdiChild::_activeLayer
private

Definition at line 140 of file cadmdichild.h.

std::shared_ptr<LCViewer::Cursor> CadMdiChild::_cursor
private

Definition at line 132 of file cadmdichild.h.

LuaIntf::LuaRef CadMdiChild::_destroyCallback
private

Definition at line 125 of file cadmdichild.h.

std::shared_ptr<lc::Document> CadMdiChild::_document
private

Definition at line 127 of file cadmdichild.h.

LCViewer::DragManager_SPtr CadMdiChild::_dragManager
private

Definition at line 135 of file cadmdichild.h.

LCViewer::DragPoints_SPtr CadMdiChild::_dragPoints
private

Definition at line 136 of file cadmdichild.h.

std::shared_ptr<LCViewer::GradientBackground> CadMdiChild::_gradientBackground
private

Definition at line 131 of file cadmdichild.h.

std::shared_ptr<LCViewer::Grid> CadMdiChild::_grid
private

Definition at line 130 of file cadmdichild.h.

unsigned int CadMdiChild::_id
private

Definition at line 123 of file cadmdichild.h.

lc::ui::MetaInfoManager_SPtr CadMdiChild::_metaInfoManager
private

Definition at line 141 of file cadmdichild.h.

LCViewer::SnapManagerImpl_SPtr CadMdiChild::_snapManager
private

Definition at line 133 of file cadmdichild.h.

lc::StorageManager_SPtr CadMdiChild::_storageManager
private

Definition at line 137 of file cadmdichild.h.

LCViewer::TempEntities_SPtr CadMdiChild::_tempEntities
private

Definition at line 138 of file cadmdichild.h.

lc::UndoManagerImpl_SPtr CadMdiChild::_undoManager
private

Definition at line 128 of file cadmdichild.h.

LCViewer::LCADViewer* CadMdiChild::_viewer
private

Definition at line 146 of file cadmdichild.h.

QScrollBar* CadMdiChild::horizontalScrollBar
private

Definition at line 143 of file cadmdichild.h.

QScrollBar* CadMdiChild::verticalScrollBar
private

Definition at line 144 of file cadmdichild.h.


The documentation for this class was generated from the following files: