ADD_SUBDIRECTORY (src/ModelAPI)
ADD_SUBDIRECTORY (src/Model)
+ADD_SUBDIRECTORY (src/XGUI)
+ADD_SUBDIRECTORY (src/GeomModule)
\ No newline at end of file
--- /dev/null
+#include "GeomModule.h"
+
+#include <QFile>
+#include <QDir>
+#include <QApplication>
+#include <QTextStream>
+
+/*!Create and return new instance of XGUI_Module*/
+extern "C" GM_EXPORT XGUI_Module* createModule()
+{
+ return new GeomModule();
+}
+
+
+GeomModule::GeomModule()
+{
+ QString aDir = qApp->applicationDirPath();
+ QString aXMLFile = aDir + QDir::separator() + "main_menu.xml";
+
+ QFile aFile(aXMLFile);
+ if (aFile.open((QIODevice::ReadOnly | QIODevice::Text))) {
+ QTextStream aTextStream(&aFile);
+ myMenuXML = aTextStream.readAll();
+ }
+}
+
+
+GeomModule::~GeomModule()
+{
+}
+
+QString GeomModule::moduleDescription() const
+{
+ return myMenuXML;
+}
\ No newline at end of file
--- /dev/null
+
+#ifndef GeomModule_H
+#define GeomModule_H
+
+#include "GeomModule_Defs.h"
+
+#include <XGUI_Module.h>
+
+class GM_EXPORT GeomModule : public XGUI_Module
+{
+public:
+ GeomModule();
+ virtual ~GeomModule();
+
+ virtual QString moduleDescription() const;
+
+private:
+ QString myMenuXML;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef GeomModule_Defs_H
+#define GeomModule_Defs_H
+
+
+#if defined WIN32
+# if defined GM_EXPORTS || defined gm_EXPORTS
+# define GM_EXPORT __declspec( dllexport )
+# else
+# define GM_EXPORT __declspec( dllimport )
+# endif
+#else
+# define GM_EXPORT
+#endif
+
+
+#endif
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<main_menu>
+ <workbench name="Primitives">
+ <group>
+ <operation
+ name="box_operation"
+ icon=":icons/box.png"
+ title="OPERATION_BOX_MENU"
+ tooltip="OPERATION_BOX_TIP"
+ />
+ </group>
+ </workbench>
+</main_menu>
--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
+
+INCLUDE(Common)
+INCLUDE(FindQt5)
+
+SET(PROJECT_HEADERS
+ XGUI_Command.h
+ XGUI_MainMenu.h
+ XGUI_MainWindow.h
+ XGUI_MenuGroupPanel.h
+ XGUI_Module.h
+ XGUI_Tools.h
+ XGUI_Workbench.h
+ XGUI_Workshop.h
+)
+
+SET(PROJECT_AUTOMOC
+ ${CMAKE_CURRENT_BINARY_DIR}/XGUI_automoc.cpp
+)
+
+SET(PROJECT_SOURCES
+ XGUI_Command.cpp
+ XGUI_Main.cpp
+ XGUI_MainMenu.cpp
+ XGUI_MainWindow.cpp
+ XGUI_MenuGroupPanel.cpp
+ XGUI_Tools.cpp
+ XGUI_Workbench.cpp
+ XGUI_Workshop.cpp
+)
+
+SET(PROJECT_RESOURCES
+ XGUI_pictures.qrc
+)
+
+SET(TEXT_RESOURCES
+ XGUI_msg_en.ts
+)
+
+QT5_ADD_RESOURCES(PROJECT_COMPILED_RESOURCES ${PROJECT_RESOURCES})
+QT5_ADD_TRANSLATION(QM_RESOURCES ${TEXT_RESOURCES})
+
+SOURCE_GROUP ("Generated Files" FILES ${PROJECT_AUTOMOC} ${PROJECT_COMPILED_RESOURCES} ${QM_RESOURCES})
+SOURCE_GROUP ("Resource Files" FILES ${TEXT_RESOURCES} ${PROJECT_RESOURCES})
+
+ADD_DEFINITIONS(-DWIN32 -D_WINDOWS)
+
+ADD_EXECUTABLE(XGUI WIN32
+ ${PROJECT_SOURCES}
+ ${PROJECT_HEADERS}
+ ${PROJECT_COMPILED_RESOURCES}
+ ${TEXT_RESOURCES}
+ ${QM_RESOURCES}
+)
+
+# The Qt5Widgets_LIBRARIES variable also includes QtGui and QtCore
+TARGET_LINK_LIBRARIES(XGUI ${Qt5Widgets_LIBRARIES})
+
+INSTALL(TARGETS XGUI DESTINATION bin)
+INSTALL(FILES ${QM_RESOURCES} DESTINATION bin)
--- /dev/null
+#include "XGUI_Command.h"
+
+#include <QPushButton>
+
+XGUI_Command::XGUI_Command(QObject * parent) :
+ QWidgetAction(parent)
+{
+}
+
+XGUI_Command::XGUI_Command(const QIcon& icon, const QString& text, QObject* parent):
+ QWidgetAction(parent)
+{
+ setIcon(icon);
+ setText(text);
+}
+
+
+XGUI_Command::~XGUI_Command()
+{
+}
+
+QWidget* XGUI_Command::createWidget(QWidget* theParent)
+{
+ if (theParent->inherits("XGUI_MenuGroupPanel")) {
+ QPushButton* aBtn = new QPushButton(theParent);
+ aBtn->setIcon(icon());
+ aBtn->setText(text());
+ QKeySequence aKeys = shortcut();
+ QString aToolTip = toolTip();
+ if (!aKeys.isEmpty())
+ aToolTip = aToolTip + " (" + aKeys.toString() + ")";
+ if (!aToolTip.isEmpty())
+ aBtn->setToolTip(aToolTip);
+
+ aBtn->addAction(this);
+ connect(aBtn, SIGNAL(clicked()), this, SLOT(trigger()));
+ aBtn->setFlat(true);
+ aBtn->setMinimumSize(MIN_BUTTON_WIDTH, MIN_BUTTON_HEIGHT);
+ return aBtn;
+ }
+ return QWidgetAction::createWidget(theParent);
+}
\ No newline at end of file
--- /dev/null
+#ifndef XGUI_Command_H
+#define XGUI_Command_H
+
+#include <QWidgetAction>
+
+#define MIN_BUTTON_HEIGHT 18
+#define MIN_BUTTON_WIDTH 40
+
+
+class XGUI_Command : public QWidgetAction
+{
+ Q_OBJECT
+public:
+ XGUI_Command(QObject * parent);
+ XGUI_Command(const QIcon& icon, const QString& text, QObject* parent);
+ ~XGUI_Command();
+
+protected:
+ virtual QWidget* createWidget(QWidget* theParent);
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+
+#include "XGUI_Workshop.h"
+#include <QApplication>
+#include <QTranslator>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ // Install translator
+ QTranslator aTranslator;
+ aTranslator.load(app.applicationDirPath() + "\\XGUI_msg_en.qm");
+ app.installTranslator(&aTranslator);
+
+ XGUI_Workshop aWorkshop;
+ aWorkshop.startApplication();
+
+ return app.exec();
+}
--- /dev/null
+#include "XGUI_MainMenu.h"
+#include "XGUI_Workbench.h"
+#include "XGUI_MainWindow.h"
+
+#include <QLayout>
+#include <QTabWidget>
+#include <QLabel>
+#include <QDockWidget>
+
+XGUI_MainMenu::XGUI_MainMenu(XGUI_MainWindow *parent) :
+ QObject(parent), myDesktop(parent)
+{
+ parent->setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North);
+}
+
+
+XGUI_MainMenu::~XGUI_MainMenu(void)
+{
+}
+
+int XGUI_MainMenu::addWorkbench(QString theTitle)
+{
+ QDockWidget* aDoc = new QDockWidget(myDesktop);
+ aDoc->setFeatures(QDockWidget::DockWidgetVerticalTitleBar);
+ aDoc->setAllowedAreas(Qt::TopDockWidgetArea);
+ aDoc->setWindowTitle(theTitle);
+ aDoc->setMinimumHeight(30);
+ aDoc->setContentsMargins(0, 0, 0, 0);
+
+ XGUI_Workbench* aPage = new XGUI_Workbench(aDoc);
+ aDoc->setWidget(aPage);
+
+ myDesktop->addDockWidget(Qt::TopDockWidgetArea, aDoc);
+ if (myMenuTabs.length() > 1) {
+ myDesktop->tabifyDockWidget(myMenuTabs.last(), aDoc);
+ }
+
+
+ myMenuTabs.append(aDoc);
+ return myMenuTabs.length() - 1;
+}
+
+
+int XGUI_MainMenu::addGroup(int thePageId)
+{
+ XGUI_Workbench* aPage = dynamic_cast<XGUI_Workbench*>(myMenuTabs[thePageId]->widget());
+ return aPage->addGroup();
+}
+
+void XGUI_MainMenu::addCommand(int thePageId, int theGroupId, XGUI_Command* theCommand)
+{
+ XGUI_Workbench* aPage = dynamic_cast<XGUI_Workbench*>(myMenuTabs[thePageId]->widget());
+ aPage->addCommand(theGroupId, theCommand);
+}
+
--- /dev/null
+#ifndef XGUI_MainMenu_H
+#define XGUI_MainMenu_H
+
+#include <QObject>
+#include <QList>
+
+class QTabWidget;
+class QLabel;
+class QAction;
+class XGUI_Command;
+class XGUI_MainWindow;
+class QDockWidget;
+
+
+class XGUI_MainMenu : public QObject
+{
+ Q_OBJECT
+public:
+ XGUI_MainMenu(XGUI_MainWindow *parent);
+ virtual ~XGUI_MainMenu();
+
+ int addWorkbench(QString theTitle);
+
+ int addGroup(int thePageId);
+
+ void addCommand(int thePageId, int theGroupId, XGUI_Command* theCommand);
+
+private:
+ XGUI_MainWindow* myDesktop;
+ QList<QDockWidget*> myMenuTabs;
+};
+
+#endif
--- /dev/null
+#include "XGUI_MainWindow.h"
+#include "XGUI_MainMenu.h"
+
+#include <QMdiArea>
+#include <QTreeWidget>
+#include <QDockWidget>
+#include <QTextEdit>
+#include <QMdiSubWindow>
+#include <QLabel>
+#include <QToolBar>
+#include <QToolButton>
+#include <QAction>
+#include <QTreeWidgetItem>
+
+XGUI_MainWindow::XGUI_MainWindow(QWidget* parent) :
+ QMainWindow(parent), myObjectBrowser(0)
+{
+ //menuBar();
+ myMenuBar = new XGUI_MainMenu(this);
+
+ QDockWidget* aDoc = new QDockWidget(this);
+ aDoc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ aDoc->setWindowTitle(tr("OBJECT_BROWSER_TITLE"));
+ myObjectBrowser = new QTreeWidget(aDoc);
+ myObjectBrowser->setColumnCount(1);
+ myObjectBrowser->setHeaderHidden(true);
+ aDoc->setWidget(myObjectBrowser);
+ addDockWidget(Qt::LeftDockWidgetArea, aDoc);
+ aDoc->hide();
+
+ aDoc = new QDockWidget(this);
+ aDoc->setFeatures(QDockWidget::AllDockWidgetFeatures | QDockWidget::DockWidgetVerticalTitleBar);
+ aDoc->setMinimumHeight(20);
+ aDoc->setWindowTitle("Console");
+ QTextEdit* aTextEdt = new QTextEdit(aDoc);
+ aTextEdt->setText(">>>");
+ aTextEdt->setMinimumHeight(20);
+ aDoc->setWidget(aTextEdt);
+ addDockWidget(Qt::BottomDockWidgetArea, aDoc);
+
+ QMdiArea* aMdiArea = new QMdiArea(this);
+ setCentralWidget(aMdiArea);
+
+ aMdiArea->addSubWindow(getSubWindow(), Qt::FramelessWindowHint);
+
+ fillObjectBrowser();
+
+}
+
+
+QWidget* XGUI_MainWindow::getSubWindow()
+{
+ QMdiSubWindow* aSub = new QMdiSubWindow(this);
+ QLabel* aLbl = new QLabel(aSub);
+ aLbl->setFrameStyle(QFrame::Sunken);
+ aLbl->setFrameShape(QFrame::Panel);
+ aLbl->setPixmap(QPixmap(":pictures/ViewPort.png"));
+ aLbl->setScaledContents(true);
+ aSub->setWidget(aLbl);
+
+ QStringList aPictures;
+ aPictures<<":pictures/occ_view_camera_dump.png"<<":pictures/occ_view_style_switch.png";
+ aPictures<<":pictures/occ_view_triedre.png"<<":pictures/occ_view_fitall.png";
+ aPictures<<":pictures/occ_view_fitarea.png"<<":pictures/occ_view_zoom.png";
+ aPictures<<":pictures/occ_view_pan.png"<<":pictures/occ_view_glpan.png";
+ aPictures<<":pictures/occ_view_rotate.png"<<":pictures/occ_view_front.png";
+ aPictures<<":pictures/occ_view_back.png"<<":pictures/occ_view_left.png";
+ aPictures<<":pictures/occ_view_right.png"<<":pictures/occ_view_top.png";
+ aPictures<<":pictures/occ_view_bottom.png"<<":pictures/occ_view_clone.png";
+
+ QToolBar* aBar = new QToolBar(aSub);
+ aBar->setGeometry(0,0,500,30);
+
+ QAction* aBtn;
+ foreach(QString aName, aPictures) {
+ aBtn = new QAction(aBar);
+ aBtn->setIcon(QIcon(aName));
+ aBar->addAction(aBtn);
+ }
+
+ aBar = new QToolBar(aSub);
+ aBar->setGeometry(615,0,100,25);
+ QStringList aWndIcons;
+ aWndIcons<<":pictures/wnd_minimize.png"<<":pictures/wnd_maximize.png"<<":pictures/wnd_close.png";
+ foreach(QString aName, aWndIcons) {
+ aBtn = new QAction(aBar);
+ aBtn->setIcon(QIcon(aName));
+ aBar->addAction(aBtn);
+ }
+
+ return aSub;
+}
+
+
+XGUI_MainWindow::~XGUI_MainWindow(void)
+{
+}
+
+//******************************************************
+void XGUI_MainWindow::showObjectBrowser()
+{
+ myObjectBrowser->parentWidget()->show();
+}
+
+//******************************************************
+void XGUI_MainWindow::hideObjectBrowser()
+{
+ myObjectBrowser->parentWidget()->hide();
+}
+
+//******************************************************
+void XGUI_MainWindow::fillObjectBrowser()
+{
+ QStringList aNames;
+ aNames << "Parameters" << "Constructions";
+ aNames << "Part 1" << "Part 2" << "Part 3";
+ aNames << "Properties";
+
+ QStringList aIcons;
+ aIcons << ":pictures/params_folder.png";
+ aIcons << ":pictures/constr_folder.png";
+ aIcons << ":pictures/part_ico.png";
+ aIcons << ":pictures/part_ico.png";
+ aIcons << ":pictures/part_ico.png";
+ aIcons << ":pictures/properties.png";
+
+ QList<QTreeWidgetItem*> aItems;
+ foreach(QString aName, aNames) {
+ QTreeWidgetItem* aItem = new QTreeWidgetItem(myObjectBrowser);
+ aItem->setText(0, aName);
+ aItems.append(aItem);
+ }
+ for(int i = 0; i < aItems.length(); i++) {
+ aItems[i]->setIcon(0, QIcon(aIcons[i]));
+ }
+ myObjectBrowser->addTopLevelItems(aItems);
+
+ for (int i = 2; i < 5; i++) {
+ QTreeWidgetItem* aItem = new QTreeWidgetItem(aItems[i]);
+ aItem->setText(0, "Parameters");
+ aItem->setIcon(0, QIcon(":pictures/params_folder.png"));
+
+ aItem = new QTreeWidgetItem(aItems[i]);
+ aItem->setText(0, "Construction");
+ aItem->setIcon(0, QIcon(":pictures/constr_folder.png"));
+
+ aItem = new QTreeWidgetItem(aItems[i]);
+ aItem->setText(0, "Bodies");
+ aItem->setIcon(0, QIcon(":pictures/part_ico.png"));
+
+ aItem = new QTreeWidgetItem(aItems[i]);
+ aItem->setText(0, "Features");
+ aItem->setIcon(0, QIcon(":pictures/features.png"));
+ }
+}
--- /dev/null
+#ifndef XGUI_MAINWINDOW_H
+#define XGUI_MAINWINDOW_H
+
+#include <QMainWindow>
+
+class XGUI_MainMenu;
+class QTreeWidget;
+
+class XGUI_MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ XGUI_MainWindow(QWidget* parent = 0);
+ virtual ~XGUI_MainWindow();
+
+ XGUI_MainMenu* menuObject() const { return myMenuBar; }
+
+ QTreeWidget* objectBrowser() const { return myObjectBrowser; }
+ void showObjectBrowser();
+ void hideObjectBrowser();
+
+private:
+ //!! For test purposes only
+ QWidget* getSubWindow();
+ void fillObjectBrowser();
+
+
+ XGUI_MainMenu* myMenuBar;
+ QTreeWidget* myObjectBrowser;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+#include "XGUI_MenuGroupPanel.h"
+#include "XGUI_Command.h"
+
+#include <QLayout>
+#include <QPushButton>
+#include <QAction>
+#include <QResizeEvent>
+
+#include <math.h>
+
+XGUI_MenuGroupPanel::XGUI_MenuGroupPanel(QWidget *parent) :
+ QWidget(parent), myNewRow(0), myNewCol(0), myMaxRow(1)
+{
+ myLayout = new QGridLayout(this);
+ myLayout->setSpacing(0);
+ myLayout->setMargin(0);
+ myLayout->setContentsMargins(0,0,0,0);
+}
+
+
+void XGUI_MenuGroupPanel::addCommand(XGUI_Command* theAction)
+{
+ addWidget(theAction->requestWidget(this));
+}
+
+void XGUI_MenuGroupPanel::placeWidget(QWidget* theWgt)
+{
+ if (myMaxRow == myNewRow) {
+ myNewRow = 0;
+ myNewCol++;
+ }
+ myLayout->addWidget(theWgt, myNewRow, myNewCol, Qt::AlignLeft);
+ myNewRow++;
+}
+
+void XGUI_MenuGroupPanel::addWidget(QWidget* theWgt)
+{
+ placeWidget(theWgt);
+ myWidgets.append(theWgt);
+}
+
+
+void XGUI_MenuGroupPanel::resizeEvent(QResizeEvent* theEvent)
+{
+ QWidget::resizeEvent(theEvent);
+ if (myWidgets.size() == 0)
+ return;
+
+ int aH = theEvent->size().height();
+ int aMaxRow = (int) floor(double(aH / MIN_BUTTON_HEIGHT));
+ if (aMaxRow == myMaxRow)
+ return;
+
+ myMaxRow = aMaxRow;
+ QListIterator<QWidget*> aIt(myWidgets);
+ myNewRow = 0;
+ myNewCol = 0;
+ while (aIt.hasNext()) {
+ placeWidget(aIt.next());
+ }
+}
--- /dev/null
+
+#ifndef XGUI_MenuGroupPanel_H
+#define XGUI_MenuGroupPanel_H
+
+#include <QWidget>
+#include <QList>
+
+class QGridLayout;
+class XGUI_Command;
+
+class XGUI_MenuGroupPanel : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit XGUI_MenuGroupPanel(QWidget *parent = 0);
+
+ void addCommand(XGUI_Command* theAction);
+
+protected:
+ virtual void resizeEvent(QResizeEvent *theEvent);
+
+private:
+ void addWidget(QWidget* theWgt);
+ void placeWidget(QWidget* theWgt);
+
+ QList<QWidget*> myWidgets;
+ QGridLayout* myLayout;
+ int myNewRow;
+ int myNewCol;
+ int myMaxRow;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+
+#ifndef XGUI_Module_H
+#define XGUI_Module_H
+
+#include <QString>
+
+class XGUI_Module
+{
+public:
+ //! Returns a string in XML format with definition of the module commands
+ virtual QString moduleDescription() const = 0;
+};
+
+
+//! This function must return a new module instance.
+extern "C"
+{
+ typedef XGUI_Module* (*CREATE_FUNC)();
+}
+
+#define CREATE_MODULE "createModule"
+
+
+#endif
\ No newline at end of file
--- /dev/null
+
+#include "XGUI_Tools.h"
+
+#include <QDir>
+
+
+//******************************************************************
+QString library( const QString& str )
+{
+ QString path = dir( str, false );
+ QString name = file( str, false );
+ QString ext = extension( str );
+
+#ifndef WIN32
+ if ( !name.startsWith( "lib" ) )
+ name = QString( "lib" ) + name;
+#endif
+
+#ifdef WIN32
+ QString libExt( "dll" );
+#else
+ QString libExt( "so" );
+#endif
+
+ if ( ext.toLower() != QString( "so" ) && ext.toLower() != QString( "dll" ) )
+ {
+ if ( !name.isEmpty() && !ext.isEmpty() )
+ name += QString( "." );
+ name += ext;
+ }
+
+ ext = libExt;
+
+ QString fileName = addSlash( path ) + name + QString( "." ) + ext;
+
+ return fileName;
+}
+
+//******************************************************************
+QString dir( const QString& path, bool isAbs )
+{
+ QDir aDir = QFileInfo( path ).dir();
+ QString dirPath = isAbs ? aDir.absolutePath() : aDir.path();
+ if ( dirPath == QString( "." ) )
+ dirPath = QString();
+ return dirPath;
+}
+
+
+//******************************************************************
+QString file( const QString& path, bool withExt )
+{
+ QString fPath = path;
+ while ( !fPath.isEmpty() && ( fPath[fPath.length() - 1] =='\\' || fPath[fPath.length() - 1] == '/' ) )
+ fPath.remove( fPath.length() - 1, 1 );
+
+ if ( withExt )
+ return QFileInfo( fPath ).fileName();
+ else
+ return QFileInfo( fPath ).completeBaseName();
+}
+
+//******************************************************************
+QString extension( const QString& path, bool full )
+{
+ return full ? QFileInfo( path ).completeSuffix() : QFileInfo( path ).suffix();
+}
+
+//******************************************************************
+QString addSlash( const QString& path )
+{
+ QString res = path;
+ if ( !res.isEmpty() && res.at( res.length() - 1 ) != QChar( '/' ) &&
+ res.at( res.length() - 1 ) != QChar( '\\' ) )
+ res += QDir::separator();
+ return res;
+}
--- /dev/null
+
+#ifndef XGUI_Tools_H
+#define XGUI_Tools_H
+
+#include <QString>
+
+/*!
+ \brief Convert the given parameter to the platform-specific library name.
+
+ The function appends platform-specific prefix (lib) and suffix (.dll/.so)
+ to the library file name.
+ For example, if \a str = "mylib", "libmylib.so" is returned for Linux and
+ mylib.dll for Windows.
+
+ \param str short library name
+ \return full library name
+*/
+QString library( const QString& str );
+
+/*!
+ \brief Return directory part of the file path.
+
+ If the file path does not include directory part (the file is in the
+ current directory), null string is returned.
+
+ \param path file path
+ \param abs if true (default) \a path parameter is treated as absolute file path
+ \return directory part of the file path
+*/
+QString dir( const QString& path, bool isAbs = true);
+
+
+/*!
+ \brief Return file name part of the file path.
+
+ \param path file path
+ \param withExt if true (default) complete file name (with all
+ extension except the last) is returned, otherwise only base name
+ is returned
+ \return file name part of the file path
+*/
+QString file( const QString& path, bool withExt = true );
+
+/*!
+ \brief Return extension part of the file path.
+
+ \param path file path
+ \param full if true complete extension (all extensions, dot separated)
+ is returned, otherwise (default) only last extension is returned
+ \return extension part of the file path
+*/
+QString extension( const QString& path, bool full = false );
+
+
+/*!
+ \brief Add a slash (platform-specific) to the end of \a path
+ if it is not already there.
+ \param path directory path
+ \return modified path (with slash added to the end)
+*/
+QString addSlash( const QString& path );
+
+#endif
\ No newline at end of file
--- /dev/null
+#include "XGUI_Workbench.h"
+#include "XGUI_MenuGroupPanel.h"
+
+#include <QLayout>
+#include <QResizeEvent>
+#include <QPushButton>
+
+
+#define SCROLL_STEP 20
+
+//**************************************************
+class CommandsArea : public QScrollArea
+{
+public:
+ CommandsArea(QWidget* theParent) : QScrollArea(theParent) {}
+
+protected:
+ virtual void resizeEvent(QResizeEvent * theEvent);
+};
+
+void CommandsArea::resizeEvent(QResizeEvent* theEvent)
+{
+ QScrollArea::resizeEvent(theEvent);
+ QRect aRect = widget()->childrenRect();
+ QSize aNewSize = theEvent->size();
+ if (aRect.width() > aNewSize.width())
+ aNewSize.setWidth(aRect.width() * 2);
+ widget()->resize(aNewSize);
+}
+
+
+//**************************************************
+XGUI_Workbench::XGUI_Workbench(QWidget *theParent) :
+ QWidget(theParent)
+{
+ setMinimumHeight(30);
+ QHBoxLayout* aMainLayout = new QHBoxLayout(this);
+ aMainLayout->setSpacing(0);
+ aMainLayout->setMargin(0);
+ aMainLayout->setContentsMargins(0,0,0,0);
+
+ myLeftButton = new QPushButton("<", this);
+ myLeftButton->setMaximumWidth(14);
+ //myLeftButton->setEnabled(false);
+ myLeftButton->setVisible(false);
+ connect(myLeftButton,SIGNAL(clicked()), this, SLOT(onLeftScroll()));
+ aMainLayout->addWidget(myLeftButton);
+
+ myCommandsArea = new CommandsArea(this);
+ aMainLayout->addWidget(myCommandsArea);
+
+ myChildWidget = new QWidget(myCommandsArea);
+ myCommandsArea->setWidget(myChildWidget);
+ myCommandsArea->setAlignment(Qt::AlignLeft | Qt::AlignTop);
+ myCommandsArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ myCommandsArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ myLayout = new QHBoxLayout(myChildWidget);
+ myLayout->setSpacing(0);
+ myLayout->setMargin(0);
+ myLayout->setContentsMargins(0,0,0,0);
+
+ myRightButton = new QPushButton(">", this);
+ myRightButton->setMaximumWidth(14);
+ //myRightButton->setEnabled(false);
+ myRightButton->setVisible(false);
+ connect(myRightButton,SIGNAL(clicked()), this, SLOT(onRightScroll()));
+ aMainLayout->addWidget(myRightButton);
+
+}
+
+int XGUI_Workbench::addGroup()
+{
+ if (!myLayout->isEmpty()) {
+ int aNb = myLayout->count();
+ QLayoutItem* aItem = myLayout->itemAt(aNb - 1);
+ myLayout->removeItem(aItem);
+ }
+ XGUI_MenuGroupPanel* aGroup = new XGUI_MenuGroupPanel(myChildWidget);
+ myLayout->addWidget(aGroup);
+ addSeparator();
+ myLayout->addStretch();
+ myGroups.append(aGroup);
+ return myGroups.size() - 1;
+}
+
+void XGUI_Workbench::addSeparator()
+{
+ QFrame* aLine = new QFrame(myChildWidget);
+ aLine->setFrameShape(QFrame::VLine);
+ aLine->setFrameShadow(QFrame::Sunken);
+ myLayout->addWidget(aLine);
+}
+
+void XGUI_Workbench::addCommand(int theGroupId, XGUI_Command* theCommand)
+{
+ XGUI_MenuGroupPanel* aGroup = myGroups.at(theGroupId);
+ aGroup->addCommand(theCommand);
+}
+
+
+void XGUI_Workbench::resizeEvent(QResizeEvent* theEvent)
+{
+ QWidget::resizeEvent(theEvent);
+ QSize aSize = theEvent->size();
+ myLeftButton->setMinimumHeight(aSize.height() - 2);
+ myRightButton->setMinimumHeight(aSize.height() - 2);
+
+ QSize aS = myChildWidget->sizeHint();
+ int aW = myChildWidget->width();
+ if (aW < aS.width())
+ myChildWidget->resize(aS.width(), myChildWidget->height());
+
+ //myLeftButton->setEnabled(isExceedsLeft());
+ //myRightButton->setEnabled(isExceedsRight());
+ myLeftButton->setVisible(isExceedsLeft());
+ myRightButton->setVisible(isExceedsRight());
+}
+
+
+void XGUI_Workbench::onLeftScroll()
+{
+ if (!isExceedsLeft())
+ return;
+ myChildWidget->move( myChildWidget->pos().x() + SCROLL_STEP, 0 );
+ myLeftButton->setVisible(isExceedsLeft());
+ myRightButton->setVisible(isExceedsRight());
+ //myLeftButton->setEnabled(isExceedsLeft());
+ //myRightButton->setEnabled(isExceedsRight());
+}
+
+
+void XGUI_Workbench::onRightScroll()
+{
+ if (!isExceedsRight())
+ return;
+ myChildWidget->move( myChildWidget->pos().x() - SCROLL_STEP, 0 );
+ //myLeftButton->setEnabled(isExceedsLeft());
+ //myRightButton->setEnabled(isExceedsRight());
+ myLeftButton->setVisible(isExceedsLeft());
+ myRightButton->setVisible(isExceedsRight());
+}
+
+
+bool XGUI_Workbench::isExceedsLeft()
+{
+ QPoint aPos = myChildWidget->pos();
+ return (aPos.x() < 0);
+}
+
+bool XGUI_Workbench::isExceedsRight()
+{
+ QPoint aPos = myChildWidget->pos();
+ int aVPWidth = myCommandsArea->viewport()->rect().width();
+ int aWgtWidth = myChildWidget->childrenRect().width();
+ return ((aVPWidth - aPos.x()) < aWgtWidth);
+}
--- /dev/null
+
+#ifndef XGUI_Workbench_H
+#define XGUI_Workbench_H
+
+#include <QWidget>
+#include <QScrollArea>
+#include <QList>
+
+class QHBoxLayout;
+class XGUI_MenuGroupPanel;
+class QPushButton;
+class CommandsArea;
+class XGUI_Command;
+
+
+class XGUI_Workbench : public QWidget
+{
+ Q_OBJECT
+public:
+ XGUI_Workbench(QWidget* theParent);
+
+ int addGroup();
+
+ void addCommand(int theGroupId, XGUI_Command* theCommand);
+
+private slots:
+ void onLeftScroll();
+ void onRightScroll();
+
+protected:
+ virtual void resizeEvent(QResizeEvent * theEvent);
+
+private:
+ void addSeparator();
+ bool isExceedsLeft();
+ bool isExceedsRight();
+
+
+ QWidget* myChildWidget;
+ QHBoxLayout* myLayout;
+ QList<XGUI_MenuGroupPanel*> myGroups;
+
+ CommandsArea* myCommandsArea;
+ QPushButton* myRightButton;
+ QPushButton* myLeftButton;
+};
+
+#endif;
\ No newline at end of file
--- /dev/null
+#include "XGUI_Workshop.h"
+#include "XGUI_MainWindow.h"
+#include "XGUI_MainMenu.h"
+#include "XGUI_Command.h"
+#include "XGUI_Tools.h"
+#include "XGUI_Module.h"
+
+#include <QApplication>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#ifdef WIN32
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif
+
+
+XGUI_Workshop::XGUI_Workshop() :
+ QObject()
+{
+ myMainWindow = new XGUI_MainWindow();
+
+ // Set Logo
+ //XGUI_MainMenu* aMenuBar = myMainWindow->menuBar();
+ //aMenuBar->setLogo(QPixmap(":pictures/OCCLogo.png"));
+}
+
+//******************************************************
+XGUI_Workshop::~XGUI_Workshop(void)
+{
+}
+
+//******************************************************
+void XGUI_Workshop::startApplication()
+{
+ initMenu();
+ //loadModules();
+ myMainWindow->show();
+}
+
+//******************************************************
+void XGUI_Workshop::initMenu()
+{
+ int aPageId = addWorkbench(tr("HOME_MENU_TITLE"));
+
+ // File commands group
+ int aGroupId = addPageGroup(aPageId);
+
+ XGUI_Command* aCommand;
+
+ aCommand = createMenuCommand(aPageId, aGroupId, NEW_CMD, tr("NEW_MENU"), tr("NEW_MENU_TIP"),
+ QIcon(":pictures/new.png"), QKeySequence::New);
+ connect(aCommand, SIGNAL(triggered()), this, SLOT(onNew()));
+
+ aCommand = createMenuCommand(aPageId, aGroupId, OPEN_CMD, tr("OPEN_MENU"), tr("OPEN_MENU_TIP"),
+ QIcon(":pictures/open.png"), QKeySequence::Open);
+ connect(aCommand, SIGNAL(triggered()), this, SLOT(onOpen()));
+
+ aCommand = createMenuCommand(aPageId, aGroupId, SAVE_CMD, tr("SAVE_MENU"), tr("SAVE_MENU_TIP"),
+ QIcon(":pictures/save.png"), QKeySequence::Save);
+ connect(aCommand, SIGNAL(triggered()), this, SLOT(onSave()));
+ aCommand->setEnabled(false);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, SAVEAS_CMD, tr("SAVEAS_MENU"), tr("SAVEAS_MENU_TIP"),
+ QIcon(":pictures/save.png"));
+ connect(aCommand, SIGNAL(triggered()), this, SLOT(onSaveAs()));
+ aCommand->setEnabled(false);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, EXIT_CMD, tr("EXIT_MENU"), tr("EXIT_MENU_TIP"),
+ QIcon(":pictures/close.png"), QKeySequence::Close);
+ connect(aCommand, SIGNAL(triggered()), this, SLOT(onExit()));
+
+
+ // Edit commands group
+ aGroupId = addPageGroup(aPageId);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, UNDO_CMD, tr("UNDO_MENU"), tr("UNDO_MENU_TIP"),
+ QIcon(":pictures/undo.png"), QKeySequence::Undo);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, REDO_CMD, tr("REDO_MENU"), tr("REDO_MENU_TIP"),
+ QIcon(":pictures/redo.png"), QKeySequence::Redo);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, CUT_CMD, tr("CUT_MENU"), tr("CUT_MENU_TIP"),
+ QIcon(":pictures/cut.png"), QKeySequence::Cut);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, COPY_CMD, tr("COPY_MENU"), tr("COPY_MENU_TIP"),
+ QIcon(":pictures/copy.png"), QKeySequence::Copy);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, PASTE_CMD, tr("PASTE_MENU"), tr("PASTE_MENU_TIP"),
+ QIcon(":pictures/paste.png"), QKeySequence::Paste);
+
+ // Tests
+ aPageId = addWorkbench("Primitives");
+ aGroupId = addPageGroup(aPageId);
+
+ aCommand = createMenuCommand(aPageId, aGroupId, LAST_CMD, "Box", "Create Box", QIcon(":pictures/box.png"));
+ aCommand = createMenuCommand(aPageId, aGroupId, LAST_CMD, "Cylinder", "Create Cylinder", QIcon(":pictures/cylinder.png"));
+ aCommand = createMenuCommand(aPageId, aGroupId, LAST_CMD, "Disk", "Create Disk", QIcon(":pictures/disk.png"));
+ aCommand = createMenuCommand(aPageId, aGroupId, LAST_CMD, "Torus", "Create Torus", QIcon(":pictures/torus.png"));
+
+ aPageId = addWorkbench("Operations");
+
+}
+
+//******************************************************
+XGUI_Command* XGUI_Workshop::createMenuCommand(int thePageId, int theGroupId, XCommandId theCmdId,
+ const QString& theTitle, const QString& theTip,
+ const QIcon& theIcon, const QKeySequence& theKeys)
+{
+ XGUI_Command* aCommand = new XGUI_Command(theIcon, theTitle, this);
+ aCommand->setToolTip(theTip);
+ if (!theKeys.isEmpty())
+ aCommand->setShortcut(theKeys);
+ addCommand(theCmdId, thePageId, theGroupId, aCommand);
+ return aCommand;
+}
+
+//******************************************************
+int XGUI_Workshop::addWorkbench(const QString& theName)
+{
+ XGUI_MainMenu* aMenuBar = myMainWindow->menuObject();
+ return aMenuBar->addWorkbench(theName);
+}
+
+//******************************************************
+int XGUI_Workshop::addPageGroup(int thePageId)
+{
+ XGUI_MainMenu* aMenuBar = myMainWindow->menuObject();
+ return aMenuBar->addGroup(thePageId);
+}
+
+//******************************************************
+void XGUI_Workshop::addCommand(XCommandId theCommandId, int thePageId, int theGroupId, XGUI_Command* theCommand)
+{
+ XGUI_MainMenu* aMenuBar = myMainWindow->menuObject();
+ aMenuBar->addCommand(thePageId, theGroupId, theCommand);
+ myCommands[theCommandId] = theCommand;
+}
+
+//******************************************************
+XGUI_Command* XGUI_Workshop::command(XCommandId theId) const
+{
+ if (myCommands.contains(theId))
+ return myCommands[theId];
+ return 0;
+}
+
+//******************************************************
+void XGUI_Workshop::onExit()
+{
+ qApp->exit();
+}
+
+//******************************************************
+void XGUI_Workshop::onNew()
+{
+ myMainWindow->showObjectBrowser();
+}
+
+//******************************************************
+void XGUI_Workshop::onOpen()
+{
+ QString aFileName = QFileDialog::getOpenFileName(mainWindow());
+}
+
+//******************************************************
+void XGUI_Workshop::onSave()
+{
+}
+
+//******************************************************
+void XGUI_Workshop::onSaveAs()
+{
+ QString aFileName = QFileDialog::getSaveFileName(mainWindow());
+}
+
+//******************************************************
+XGUI_Module* XGUI_Workshop::loadModule(const QString& theModule)
+{
+ QString libName = library( theModule );
+ if ( libName.isEmpty() )
+ {
+ qWarning( qPrintable( tr( "Information about module \"%1\" doesn't exist." ).arg( theModule ) ) );
+ return 0;
+ }
+
+ QString err;
+ CREATE_FUNC crtInst = 0;
+
+#ifdef WIN32
+ HINSTANCE modLib = ::LoadLibrary( (LPTSTR) libName.utf16() );
+ if ( !modLib )
+ {
+ LPVOID lpMsgBuf;
+ ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS, 0, ::GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, 0 );
+ QString aMsg((char*)&lpMsgBuf);
+ err = QString( "Failed to load %1. %2" ).arg( libName ).arg( aMsg );
+ ::LocalFree( lpMsgBuf );
+ }
+ else
+ {
+ crtInst = (CREATE_FUNC)::GetProcAddress( modLib, CREATE_MODULE );
+ if ( !crtInst )
+ {
+ LPVOID lpMsgBuf;
+ ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS, 0, ::GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, 0 );
+ QString aMsg((char*)&lpMsgBuf);
+ err = QString( "Failed to find %1 function. %2" ).arg( CREATE_MODULE ).arg(aMsg );
+ ::LocalFree( lpMsgBuf );
+ }
+ }
+#else
+ void* modLib = dlopen( libName.toLatin1(), RTLD_LAZY );
+ if ( !modLib )
+ err = QString( "Can not load library %1. %2" ).arg( libName ).arg( dlerror() );
+ else
+ {
+ crtInst = (CREATE_FUNC)dlsym( modLib, GET_MODULE_NAME );
+ if ( !crtInst )
+ err = QString( "Failed to find function %1. %2" ).arg( CREATE_MODULE ).arg( dlerror() );
+ }
+#endif
+
+ XGUI_Module* aModule = crtInst ? crtInst() : 0;
+
+ if ( !err.isEmpty() ) {
+ if ( mainWindow() && mainWindow()->isVisible() )
+ QMessageBox::warning( mainWindow(), tr( "Error" ), err );
+ else
+ qWarning( qPrintable( err ) );
+ }
+ return aModule;
+}
+
+//******************************************************
+void XGUI_Workshop::loadModules()
+{
+ // Test of modules loading
+ QStringList aModules;
+ aModules << "GeomModule";
+
+ foreach(QString aName, aModules) {
+ XGUI_Module* aModule = loadModule(aName);
+ buildModuleMenu(aModule->moduleDescription());
+ }
+}
+
+//******************************************************
+void XGUI_Workshop::buildModuleMenu(const QString& theXML)
+{
+
+}
--- /dev/null
+
+#ifndef XGUI_WORKSHOP_H
+#define XGUI_WORKSHOP_H
+
+#include <QObject>
+#include <QMap>
+#include <QIcon>
+#include <QKeySequence>
+
+class XGUI_MainWindow;
+class XGUI_Command;
+class XGUI_Module;
+
+class XGUI_Workshop: public QObject
+{
+ Q_OBJECT
+public:
+ enum XCommandId {
+ NEW_CMD,
+ OPEN_CMD,
+ SAVE_CMD,
+ SAVEAS_CMD,
+ EXIT_CMD,
+ UNDO_CMD,
+ REDO_CMD,
+ COPY_CMD,
+ CUT_CMD,
+ PASTE_CMD,
+ LAST_CMD
+ };
+
+ XGUI_Workshop();
+ virtual ~XGUI_Workshop();
+
+ void startApplication();
+
+ XGUI_Command* command(XCommandId theId) const;
+
+ XGUI_MainWindow* mainWindow() const { return myMainWindow; }
+
+public slots:
+ void onNew();
+ void onOpen();
+ void onSave();
+ void onSaveAs();
+ void onExit();
+
+private:
+ void initMenu();
+
+ XGUI_Module* loadModule(const QString& theModule);
+ void loadModules();
+
+ void buildModuleMenu(const QString& theXML);
+
+ int addWorkbench(const QString& theName);
+ int addPageGroup(int thePageId);
+ void addCommand(XCommandId theCommandId, int thePageId, int theGroupId, XGUI_Command* theCommand);
+ XGUI_Command* createMenuCommand(int thePageId, int theGroupId, XCommandId theCmdId,
+ const QString& theTitle, const QString& theTip,
+ const QIcon& theIcon = QIcon(), const QKeySequence& theKeys = QKeySequence());
+
+ QMap<int, XGUI_Command*> myCommands;
+
+ XGUI_MainWindow* myMainWindow;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>@default</name>
+</context>
+<context>
+ <name>XGUI_Workshop</name>
+ <message>
+ <source>HOME_MENU_TITLE</source>
+ <translation>Home</translation>
+ </message>
+ <message>
+ <source>NEW_MENU</source>
+ <translation>New</translation>
+ </message>
+ <message>
+ <source>NEW_MENU_TIP</source>
+ <translation>Create new document</translation>
+ </message>
+ <message>
+ <source>OPEN_MENU</source>
+ <translation>Open...</translation>
+ </message>
+ <message>
+ <source>OPEN_MENU_TIP</source>
+ <translation>Open document</translation>
+ </message>
+ <message>
+ <source>SAVE_MENU</source>
+ <translation>Save</translation>
+ </message>
+ <message>
+ <source>SAVE_MENU_TIP</source>
+ <translation>Save document</translation>
+ </message>
+ <message>
+ <source>SAVEAS_MENU</source>
+ <translation>Save As...</translation>
+ </message>
+ <message>
+ <source>SAVEAS_MENU_TIP</source>
+ <translation>Save document in another file</translation>
+ </message>
+ <message>
+ <source>EXIT_MENU</source>
+ <translation>Exit</translation>
+ </message>
+ <message>
+ <source>EXIT_MENU_TIP</source>
+ <translation>Exit from application</translation>
+ </message>
+ <message>
+ <source>UNDO_MENU</source>
+ <translation>Undo</translation>
+ </message>
+ <message>
+ <source>UNDO_MENU_TIP</source>
+ <translation>Undo last command</translation>
+ </message>
+ <message>
+ <source>REDO_MENU</source>
+ <translation>Redo</translation>
+ </message>
+ <message>
+ <source>REDO_MENU_TIP</source>
+ <translation>Redo last command</translation>
+ </message>
+ <message>
+ <source>CUT_MENU</source>
+ <translation>Cut</translation>
+ </message>
+ <message>
+ <source>CUT_MENU_TIP</source>
+ <translation>Cut selected object</translation>
+ </message>
+ <message>
+ <source>COPY_MENU</source>
+ <translation>Copy</translation>
+ </message>
+ <message>
+ <source>COPY_MENU_TIP</source>
+ <translation>Copy selected object</translation>
+ </message>
+ <message>
+ <source>PASTE_MENU</source>
+ <translation>Paste</translation>
+ </message>
+ <message>
+ <source>PASTE_MENU_TIP</source>
+ <translation>Paste copied object</translation>
+ </message>
+</context>
+<context>
+ <name>XGUI_MainWindow</name>
+ <message>
+ <source>OBJECT_BROWSER_TITLE</source>
+ <translation>Object Browser</translation>
+ </message>
+</context>
+<context>
+ <name>XGUI_MainMenu</name>
+ <message>
+ <source>MENU_TITLE</source>
+ <translation>Menu</translation>
+ </message>
+</context>
+</TS>
--- /dev/null
+ <!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+ <file>pictures/new.png</file>
+ <file>pictures/open.png</file>
+ <file>pictures/save.png</file>
+ <file>pictures/close.png</file>
+ <file>pictures/copy.png</file>
+ <file>pictures/cut.png</file>
+ <file>pictures/paste.png</file>
+ <file>pictures/redo.png</file>
+ <file>pictures/undo.png</file>
+ <!--For test purposes-->
+ <file>pictures/box.png</file>
+ <file>pictures/cylinder.png</file>
+ <file>pictures/disk.png</file>
+ <file>pictures/torus.png</file>
+ <file>pictures/ViewPort.png</file>
+
+ <file>pictures/occ_view_ambient.png</file>
+ <file>pictures/occ_view_anticlockwise.png</file>
+ <file>pictures/occ_view_back.png</file>
+ <file>pictures/occ_view_bottom.png</file>
+ <file>pictures/occ_view_camera_dump.png</file>
+ <file>pictures/occ_view_clipping.png</file>
+ <file>pictures/occ_view_clipping_pressed.png</file>
+ <file>pictures/occ_view_clockwise.png</file>
+ <file>pictures/occ_view_clone.png</file>
+ <file>pictures/occ_view_fitall.png</file>
+ <file>pictures/occ_view_fitarea.png</file>
+ <file>pictures/occ_view_front.png</file>
+ <file>pictures/occ_view_glpan.png</file>
+ <file>pictures/occ_view_graduated_axes.png</file>
+ <file>pictures/occ_view_left.png</file>
+ <file>pictures/occ_view_maximized.png</file>
+ <file>pictures/occ_view_minimized.png</file>
+ <file>pictures/occ_view_pan.png</file>
+ <file>pictures/occ_view_preselection.png</file>
+ <file>pictures/occ_view_presets.png</file>
+ <file>pictures/occ_view_reset.png</file>
+ <file>pictures/occ_view_return_3d_view.png</file>
+ <file>pictures/occ_view_right.png</file>
+ <file>pictures/occ_view_rotate.png</file>
+ <file>pictures/occ_view_rotation_point.png</file>
+ <file>pictures/occ_view_scaling.png</file>
+ <file>pictures/occ_view_selection.png</file>
+ <file>pictures/occ_view_shoot.png</file>
+ <file>pictures/occ_view_style_switch.png</file>
+ <file>pictures/occ_view_top.png</file>
+ <file>pictures/occ_view_triedre.png</file>
+ <file>pictures/occ_view_zoom.png</file>
+ <file>pictures/occ_view_zooming_style_switch.png</file>
+
+ <file>pictures/wnd_close.png</file>
+ <file>pictures/wnd_minimize.png</file>
+ <file>pictures/wnd_maximize.png</file>
+
+ <file>pictures/params_folder.png</file>
+ <file>pictures/constr_folder.png</file>
+ <file>pictures/part_ico.png</file>
+ <file>pictures/properties.png</file>
+ <file>pictures/features.png</file>
+
+ </qresource>
+ </RCC>