Jelajahi Sumber

Add sithlord48's template installer Qt project, setup Qt to build properly, add Qt dlls to installer for windows

Paul 11 tahun lalu
induk
melakukan
15a0042406

+ 111 - 107
CMakeLists.txt

@@ -110,16 +110,16 @@ if (NOT OGRE_BUILD_PLATFORM_IPHONE)
 
         # Set up referencing of Boost
         include_directories(${Boost_INCLUDE_DIR})
-	if (NOT APPLE)        
-	add_definitions(-DBOOST_ALL_NO_LIB)
-	endif()
+    if (NOT APPLE)        
+    add_definitions(-DBOOST_ALL_NO_LIB)
+    endif()
 
         set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
 
         find_package(Boost COMPONENTS program_options filesystem QUIET)
         set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
         set(QGears_LIBRARIES ${OGRE_LIBRARIES})
-		
+        
         if(QGears_SOUND)
             find_package(OpenAL REQUIRED)
             find_package(OggVorbis REQUIRED)
@@ -141,7 +141,7 @@ if (NOT OGRE_BUILD_PLATFORM_IPHONE)
         endif()
 
         if(QGears_BUILD_TESTS)
-	    message(STATUS "Looking for boost unit test..")
+        message(STATUS "Looking for boost unit test..")
             find_package(Boost COMPONENTS unit_test_framework REQUIRED)
             set(QGears_TEST_LIBRARIES
                 ${OGRE_LIBRARIES}
@@ -167,11 +167,11 @@ set(QGears_INCLUDE_DIRS
     ${OGRE_Overlay_INCLUDE_DIRS}
     ${OGRE_SAMPLES_INCLUDEPATH}
     ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
-	${CMAKE_CURRENT_BINARY_DIR}/dependencies/luajit
-	${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luajit/src
-	${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind
-	${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind/luabind/detail
-	${CMAKE_CURRENT_SOURCE_DIR}/dependencies/tinyxml
+    ${CMAKE_CURRENT_BINARY_DIR}/dependencies/luajit
+    ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luajit/src
+    ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind
+    ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luabind/luabind/detail
+    ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/tinyxml
 )
 
 
@@ -218,113 +218,117 @@ MESSAGE( STATUS "BOOST_ROOT:         " ${BOOST_ROOT} )
 
 #OS SPECIFIC 
 if(WIN32)
-	# On Windows generate MSI packages
-	SET(CPACK_GENERATOR "WIX")
-	
-	set(CPACK_WIX_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/wix.template.in")
-	SET(CPACK_WIX_UPGRADE_GUID 8fbb893f-5622-4f6d-a7f6-c221f7be5d52)
+    # On Windows generate MSI packages
+    SET(CPACK_GENERATOR "WIX")
+    
+    set(CPACK_WIX_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/wix.template.in")
+    SET(CPACK_WIX_UPGRADE_GUID 8fbb893f-5622-4f6d-a7f6-c221f7be5d52)
 
 # TODO: Set MSI banner image, copyright info etc, also include startmenu/desktop shortcuts
-	#set the name of the installer default formating is name-version-os
-	
-	# If empty assume release
-	if ("${CMAKE_BUILD_TYPE}" STREQUAL "" OR "${CMAKE_BUILD_TYPE}" STREQUAL "release")
-		message("RELEASE installer build")
-		install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./)
-		install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OgreMain.dll DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/RenderSystem_GL.dll DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OGREOVERLAY.DLL DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OIS.DLL DESTINATION ./)
-	else()
-		message("DEBUG installer build")
-		install(FILES ${PROJECT_SOURCE_DIR}/output/resources_d.cfg DESTINATION ./)
-		install(FILES ${PROJECT_SOURCE_DIR}/output/plugins_d.cfg DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OgreMain_d.dll DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/RenderSystem_GL_d.dll DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OGREOVERLAY_D.DLL DESTINATION ./)
-		install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OIS_D.DLL DESTINATION ./)
-	endif()
+    #set the name of the installer default formating is name-version-os
+    
+    # If empty assume release
+    if ("${CMAKE_BUILD_TYPE}" STREQUAL "" OR "${CMAKE_BUILD_TYPE}" STREQUAL "release")
+        message("RELEASE installer build")
+        install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./)
+        install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OgreMain.dll DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/RenderSystem_GL.dll DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OGREOVERLAY.DLL DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OIS.DLL DESTINATION ./)
+        install(FILES ${QT_PLUGINS_DIR}/../bin/QtCore4.dll DESTINATION ./)
+        install(FILES ${QT_PLUGINS_DIR}/../bin/QtGui4.dll DESTINATION ./)
+    else()
+        message("DEBUG installer build")
+        install(FILES ${PROJECT_SOURCE_DIR}/output/resources_d.cfg DESTINATION ./)
+        install(FILES ${PROJECT_SOURCE_DIR}/output/plugins_d.cfg DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OgreMain_d.dll DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/RenderSystem_GL_d.dll DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OGREOVERLAY_D.DLL DESTINATION ./)
+        install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OIS_D.DLL DESTINATION ./)
+        install(FILES ${QT_PLUGINS_DIR}/../bin/QtCored4.dll DESTINATION ./)
+        install(FILES ${QT_PLUGINS_DIR}/../bin/QtGuid4.dll DESTINATION ./)
+    endif()
 elseif(APPLE)
-	# APPLE is also UNIX, so must check for APPLE before UNIX
-	SET(CPACK_GENERATOR "DragNDrop")
- 	install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./)
-	install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./)
+    # APPLE is also UNIX, so must check for APPLE before UNIX
+    SET(CPACK_GENERATOR "DragNDrop")
+    install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./)
+    install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./)
         install(FILES ${OGRE_CMAKE_MODULE_PATH}/../lib/macosx/Release/Ogre.framework/Ogre DESTINATION ./)
         install(FILES ${OGRE_CMAKE_MODULE_PATH}/../lib/macosx/Release/RenderSystem_GL.framework/Versions/1.9.0/RenderSystem_GL DESTINATION ./)
         install(FILES ${OGRE_CMAKE_MODULE_PATH}/../lib/macosx/Release/OgreOverlay.framework/Versions/1.9.0/OgreOverlay DESTINATION ./)
 
-	# TODO: Fix up other files and use "otool" to fix dynlib + framework paths
+    # TODO: Fix up other files and use "otool" to fix dynlib + framework paths
         #install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OIS.DLL DESTINATION ./)
         #install(FILES "${BOOST_ROOT}/stage/lib/BOOST_SYSTEM-VC120-MT-1_55.DLL" DESTINATION ./)
 elseif(UNIX)
-	# On Linux generate TAR.GZ,DEB and RPM packages
-	#Find out what architecture are we running on and set the package architecture 
-	
-	# set the generic files needing to be installed
-	install( FILES ${PROJECT_SOURCE_DIR}/q-gears.png DESTINATION ./share/pixmaps/ )
-	install( FILES ${PROJECT_SOURCE_DIR}/q-gears.desktop DESTINATION ./share/applications/ )
-	install( FILES ${PROJECT_SOURCE_DIR}/debian/menu DESTINATION share/menu/ RENAME q-gears )
-	install( FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg_linux DESTINATION share/q-gears/ RENAME plugins.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
-	install( FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg_linux DESTINATION share/q-gears/ RENAME resources.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
-	install( FILES ${PROJECT_SOURCE_DIR}/output/q-gears.cfg_linux DESTINATION share/q-gears/ RENAME q-gears.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
-		
-	if(EXISTS "/usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so")
-	  install( FILES /usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so DESTINATION share/q-gears/plugins/ RENAME RenderSystem_GL.so.1.9.0 )
-	endif()
-		
-		
-	SET(CPACK_SOURCE_GENERATOR "TGZ;TZ")
-	SET(CPACK_GENERATOR "TGZ")
-	#detect Distro Family DEB , RPM 
-	if(EXISTS "/etc/lsb-release")
-	    set(DistroType DEB)
-	elseif(EXISTS "/etc/debian_release")
-	    set(DistroType DEB)
-	elseif(EXISTS "/etc/fedora-release")
-	    set(DistroType RPM)
-	endif()
-	message(STATUS "Distro Detected: ${DistroType} ")
-
-	if(DistroType MATCHES "DEB")
-	  # Setup DEB package properties
-	  MESSAGE(STATUS "DEB ADDED TO GENERATION LIST")
-	  SET(CPACK_GENERATOR "${CPACK_GENERATOR};DEB")
-	endif()
-	if(EXISTS "/usr/bin/rpmbuild")
-	  MESSAGE(STATUS "RPM ADDED TO GENERATION LIST (RPM IS DISABLED IN CMAKELISTS)")
-	#  Uncomment to allow for rpm files to be built.   
-	#  SET(CPACK_GENERATOR "${CPACK_GENERATOR};RPM")
-	endif()
-	
-	# Setup DEB package properties
-	SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Chris Rizzitello <sithlord48@gmail.com>")
-	
-	
-	#Set DEBIAN INFO
-	SET(CPACK_DEBIAN_PACKAGE_SECTION games)
-	SET(CPACK_DEBIAN_PACKAGE_PRIORITY extra)
-	#SET(CPACK_PACKAGE_EXECUTABLE )
-	EXECUTE_PROCESS(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
-	MESSAGE (STATUS "Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
-	#we should need no longer need postinst since we have added extra install steps to what it would.
-	#SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_SOURCE_DIR}/debian/postinst )
-	#set the name to be debian package like.
-	SET(CPACK_PACKAGE_FILE_NAME "q-gears_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
-	#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9, libois,libboost-program-options,libboost-filesystem,libvorbis,libopenal,libboost-test,zlib1g")
-	SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9.0, libois-1.3.0,libboost-program-options1.54.0,libboost-filesystem1.54.0,libvorbis0a,libvorbisfile3,libvorbisenc2,libopenal1,libboost-test1.54.0,zlib1g,liblua5.1-0")
-
-	#Set RPM info
-	  SET(CPACK_RPM_PACKAGE_SUMMARY CPACK_PACKAGE_DESCRIPTION_SUMMARY)
-	  SET(CPACK_RPM_PACKAGE_NAME CPACK_PACKAGE_NAME)
-	  SET(CPACK_RPM_PACKAGE_VERSION CPACK_PACKAGE_VERSION)
-	  SET(CPACK_RPM_PACKAGE_RELEASE 1)
-	  SET(CPACK_RPM_PACKAGE_LICENSE "GPLv3+")
-	  SET(CPACK_RPM_PACKAGE_GROUP games)
-	  SET(CPACK_RPM_PACKAGE_VENDOR)
-	  SET(CPACK_RPM_PACKAGE_DESCRIPTION)
-	  #REQUIREMENTS NEED TO BE CHECKED USING FEDORA.
-	  #SET(CPACK_RPM_PACKAGE_REQUIRES "ogre,ois,boost,vorbis,lua,zlib1g")
+    # On Linux generate TAR.GZ,DEB and RPM packages
+    #Find out what architecture are we running on and set the package architecture 
+    
+    # set the generic files needing to be installed
+    install( FILES ${PROJECT_SOURCE_DIR}/q-gears.png DESTINATION ./share/pixmaps/ )
+    install( FILES ${PROJECT_SOURCE_DIR}/q-gears.desktop DESTINATION ./share/applications/ )
+    install( FILES ${PROJECT_SOURCE_DIR}/debian/menu DESTINATION share/menu/ RENAME q-gears )
+    install( FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg_linux DESTINATION share/q-gears/ RENAME plugins.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
+    install( FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg_linux DESTINATION share/q-gears/ RENAME resources.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
+    install( FILES ${PROJECT_SOURCE_DIR}/output/q-gears.cfg_linux DESTINATION share/q-gears/ RENAME q-gears.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ)
+        
+    if(EXISTS "/usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so")
+      install( FILES /usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so DESTINATION share/q-gears/plugins/ RENAME RenderSystem_GL.so.1.9.0 )
+    endif()
+        
+        
+    SET(CPACK_SOURCE_GENERATOR "TGZ;TZ")
+    SET(CPACK_GENERATOR "TGZ")
+    #detect Distro Family DEB , RPM 
+    if(EXISTS "/etc/lsb-release")
+        set(DistroType DEB)
+    elseif(EXISTS "/etc/debian_release")
+        set(DistroType DEB)
+    elseif(EXISTS "/etc/fedora-release")
+        set(DistroType RPM)
+    endif()
+    message(STATUS "Distro Detected: ${DistroType} ")
+
+    if(DistroType MATCHES "DEB")
+      # Setup DEB package properties
+      MESSAGE(STATUS "DEB ADDED TO GENERATION LIST")
+      SET(CPACK_GENERATOR "${CPACK_GENERATOR};DEB")
+    endif()
+    if(EXISTS "/usr/bin/rpmbuild")
+      MESSAGE(STATUS "RPM ADDED TO GENERATION LIST (RPM IS DISABLED IN CMAKELISTS)")
+    #  Uncomment to allow for rpm files to be built.   
+    #  SET(CPACK_GENERATOR "${CPACK_GENERATOR};RPM")
+    endif()
+    
+    # Setup DEB package properties
+    SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Chris Rizzitello <sithlord48@gmail.com>")
+    
+    
+    #Set DEBIAN INFO
+    SET(CPACK_DEBIAN_PACKAGE_SECTION games)
+    SET(CPACK_DEBIAN_PACKAGE_PRIORITY extra)
+    #SET(CPACK_PACKAGE_EXECUTABLE )
+    EXECUTE_PROCESS(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
+    MESSAGE (STATUS "Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
+    #we should need no longer need postinst since we have added extra install steps to what it would.
+    #SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_SOURCE_DIR}/debian/postinst )
+    #set the name to be debian package like.
+    SET(CPACK_PACKAGE_FILE_NAME "q-gears_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
+    #SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9, libois,libboost-program-options,libboost-filesystem,libvorbis,libopenal,libboost-test,zlib1g")
+    SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9.0, libois-1.3.0,libboost-program-options1.54.0,libboost-filesystem1.54.0,libvorbis0a,libvorbisfile3,libvorbisenc2,libopenal1,libboost-test1.54.0,zlib1g,liblua5.1-0")
+
+    #Set RPM info
+      SET(CPACK_RPM_PACKAGE_SUMMARY CPACK_PACKAGE_DESCRIPTION_SUMMARY)
+      SET(CPACK_RPM_PACKAGE_NAME CPACK_PACKAGE_NAME)
+      SET(CPACK_RPM_PACKAGE_VERSION CPACK_PACKAGE_VERSION)
+      SET(CPACK_RPM_PACKAGE_RELEASE 1)
+      SET(CPACK_RPM_PACKAGE_LICENSE "GPLv3+")
+      SET(CPACK_RPM_PACKAGE_GROUP games)
+      SET(CPACK_RPM_PACKAGE_VENDOR)
+      SET(CPACK_RPM_PACKAGE_DESCRIPTION)
+      #REQUIREMENTS NEED TO BE CHECKED USING FEDORA.
+      #SET(CPACK_RPM_PACKAGE_REQUIRES "ogre,ois,boost,vorbis,lua,zlib1g")
 
 endif()
 

+ 18 - 2
utilities/installer/CMakeLists.txt

@@ -1,15 +1,29 @@
+INCLUDE(${QT_USE_FILE})
+ADD_DEFINITIONS(${QT_DEFINITIONS})
+
+# This is where the ui generated header files end up
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
+
 include_directories(
     ${CMAKE_CURRENT_SOURCE_DIR}/include
 )
 
 # define header and source files
 set(HEADER_FILES
-
+    src/mainwindow.h
 )
 set(SOURCE_FILES
     src/Main.cpp
+    src/mainwindow.cpp
 )
 
+set(INSTALLER_FORMS
+   src/mainwindow.ui
+)
+
+QT4_WRAP_UI(INSTALLER_FORM_HEADERS ${INSTALLER_FORMS})
+QT4_WRAP_CPP(INSTALLER_HEADERS_MOC ${HEADER_FILES})
+
 add_definitions(
     -DQGEARS_ADD_MANAGERS
 )
@@ -17,6 +31,8 @@ add_definitions(
 add_executable(installer
   ${HEADER_FILES}
   ${SOURCE_FILES}
+  ${INSTALLER_FORM_HEADERS}
+  ${INSTALLER_HEADERS_MOC}
 )
 SET_PROPERTY(TARGET installer PROPERTY FOLDER "utilities")
 
@@ -35,7 +51,7 @@ set(LIBRARIES
     Utility
 )
 
-target_link_libraries(installer    ${LIBRARIES})
+target_link_libraries(installer    ${LIBRARIES} ${QT_LIBRARIES})
 
 install(TARGETS installer
     DESTINATION .

+ 8 - 5
utilities/installer/src/Main.cpp

@@ -1,8 +1,11 @@
-#include <Ogre.h>
-#include "../../common/OgreBase.h"
-#include "../../common/Logger.h"
+#include "mainwindow.h"
+#include <QApplication>
 
-int main( int argc, char *argv[] )
+int main(int argc, char *argv[])
 {
-    return 0;
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
 }

+ 48 - 0
utilities/installer/src/mainwindow.cpp

@@ -0,0 +1,48 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+    /*
+     set any options here
+     */
+
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::on_btnInput_clicked()
+{
+    QString temp = QFileDialog::getExistingDirectory(this,tr("Location of Game Data),"),QDir::homePath());
+    ui->lineInput->setText(temp);
+}
+
+
+void MainWindow::on_btnOutput_clicked()
+{
+    QString temp = QFileDialog::getExistingDirectory(this,tr("Location of QGears Data),"),QDir::homePath());
+    ui->lineOutput->setText(temp);
+}
+
+
+void MainWindow::on_btnGO_clicked()
+{
+    if (ui->lineInput->text().isEmpty())
+    {
+        QMessageBox::critical(this,tr("Input Error"),tr("No Input Provided"));
+    }
+    else if(ui->lineOutput->text().isEmpty())
+    {
+        QMessageBox::critical(this,tr("Output Error"),tr("No Output Path Provided"));
+    }
+    else
+    {
+        QMessageBox::information(this,tr("Converting Data"),tr("Attempt to convert with \n Input: %1 \n Output: %2").arg(ui->lineInput->text(),ui->lineOutput->text()));
+    }
+}

+ 30 - 0
utilities/installer/src/mainwindow.h

@@ -0,0 +1,30 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QFileDialog>
+#include <QMessageBox>
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+private slots:
+    void on_btnInput_clicked();
+
+    void on_btnOutput_clicked();
+
+    void on_btnGO_clicked();
+
+private:
+    Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H

+ 125 - 0
utilities/installer/src/mainwindow.ui

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>486</width>
+    <height>145</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Data Source:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="lineInput"/>
+      </item>
+      <item>
+       <widget class="QPushButton" name="btnInput">
+        <property name="maximumSize">
+         <size>
+          <width>24</width>
+          <height>24</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Output Path:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="lineOutput"/>
+      </item>
+      <item>
+       <widget class="QPushButton" name="btnOutput">
+        <property name="maximumSize">
+         <size>
+          <width>24</width>
+          <height>24</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item>
+     <widget class="QPushButton" name="btnGO">
+      <property name="text">
+       <string>PushButton</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>486</width>
+     <height>20</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <addaction name="actionExit"/>
+   </widget>
+   <addaction name="menuFile"/>
+  </widget>
+  <widget class="QStatusBar" name="statusBar"/>
+  <action name="actionExit">
+   <property name="text">
+    <string>Exit</string>
+   </property>
+  </action>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>actionExit</sender>
+   <signal>triggered()</signal>
+   <receiver>MainWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>242</x>
+     <y>199</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>242</x>
+     <y>199</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>