Forráskód Böngészése

new Qt launcher , merged it with installer.
updated directory and installs for linux
icon for project now set with cpack

sithlord48 11 éve
szülő
commit
91dcfc1adb

+ 5 - 4
CMakeLists.txt

@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 2.6)
 
 project(QGears)
-
+set (CMAKE_PACKAGE_ICON q-gears.png)
 #set( CMAKE_VERBOSE_MAKEFILE on )
 
 # The version number.
@@ -273,11 +273,12 @@ elseif(UNIX)
     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 )
+    if(EXISTS "/usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so.1.9.0")
+      install( FILES /usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so.1.9.0 DESTINATION lib/q-gears/plugins/ )
+    elseif(EXISTS "/usr/lib/i386-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so.1.9.0")
+      install( FILES /usr/lib/i386-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so.1.9.0 DESTINATION lib/q-gears/plugins/ )
     endif()
         
-        
     SET(CPACK_SOURCE_GENERATOR "TGZ;TZ")
     SET(CPACK_GENERATOR "TGZ")
     #detect Distro Family DEB , RPM 

+ 4 - 4
PlugIns/Data/CMakeLists.txt

@@ -97,8 +97,8 @@ if(NOT QGEARS_STATIC)
     COMPILE_DEFINITIONS QGEARS_DATAPLUGIN_EXPORTS
   )
     if(WIN32 OR APPLE)
-    install(TARGETS DataPlugin LIBRARY DESTINATION .)
-  else()
-    install(TARGETS DataPlugin LIBRARY DESTINATION ./lib/q-gears/plugins/)
-  endif()
+      install(TARGETS DataPlugin LIBRARY DESTINATION .)
+    else()
+      install(TARGETS DataPlugin LIBRARY DESTINATION ./lib/q-gears/plugins/ )
+    endif()
 endif()

+ 6 - 0
debian/changelog

@@ -1,3 +1,9 @@
+q-gears (0.22) trusty; urgency=low
+
+  Second QGears Package
+
+ -- Chris Rizzitello <sithlord48@gmail.com>  Fri, 06 Feb 2015 21:08:00 -0400
+
 q-gears (0.21) saucy; urgency=low
 
   First QGears Package

+ 1 - 0
debian/install

@@ -1,3 +1,4 @@
 q-gears.desktop /usr/share/applications
 q-gears.png /usr/share/pixmaps
+q-gears-launcher /usr/bin
 output/resources.cfg /usr/share/q-gears

+ 1 - 1
debian/menu

@@ -1,3 +1,3 @@
 ?package(q-gears):needs="x11" section="Games/Toys"\
-  title="q-gears" command="/usr/games/q-gears"
+  title="q-gears" command="/usr/bin/q-gears-launcher"
   

+ 0 - 22
debian/postinst

@@ -1,22 +0,0 @@
-#!/bin/bash
-#DEBHELPER#
-set -e
-mkdir /usr/share/q-gears/plugins
-
-echo "PluginFolder = /usr/share/q-gears/plugins/" >> /usr/share/q-gears/plugins.cfg
-ln -s /usr/lib/q-gears/plugins/Plugin_Data.so /usr/share/q-gears/plugins/Plugin_Data.so.1.9.0
-if [ -d /usr/lib/i386-linux-gnu/OGRE-1.9.0 ];then 
-  ln -s /usr/lib/i386-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so /usr/share/q-gears/plugins/RenderSystem_GL.so.1.9.0
-  echo "Plugin=RenderSystem_GL" >> /usr/share/q-gears/plugins.cfg
-elif [ -d /usr/lib/x86_64-linux-gnu/OGRE-1.9.0 ];then   
-  ln -s /usr/lib/x86_64-linux-gnu/OGRE-1.9.0/RenderSystem_GL.so /usr/share/q-gears/plugins/RenderSystem_GL.so.1.9.0
-  echo "Plugin=RenderSystem_GL" >> /usr/share/q-gears/plugins.cfg
-else echo "failed to detect OGRE"; 
-
-fi   
-
-echo "#Plugin=Plugin_Data" >> /usr/share/q-gears/plugins.cfg
-
-echo "" >> /usr/share/q-gears/q-gears.cfg
-chmod 666 /usr/share/q-gears/q-gears.cfg
-

+ 1 - 1
output/plugins.cfg_linux

@@ -1,5 +1,5 @@
 # Define plugin folder
-PluginFolder=/usr/share/q-gears/plugins/
+PluginFolder=/usr/lib/q-gears/plugins/
 #PluginFolder=~/.q-gears/plugins
 
 # Define plugins

+ 2 - 2
q-gears.desktop

@@ -1,8 +1,8 @@
 [Desktop Entry]
 Categories=Application;Game;
 Encoding=UTF-8
-Exec=/usr/games/q-gears --resources-file=/usr/share/q-gears/resources.cfg --config-file=/usr/share/q-gears/q-gears.cfg --plugins-file=/usr/share/q-gears/plugins.cfg
-Path=/usr/share/q-gears
+Exec=/usr/bin/q-gears-launcher
+#Path=/usr/share/q-gears
 GenericName=Q Gears
 Icon=q-gears.png
 Name=Q Gears

+ 1 - 1
utilities/CMakeLists.txt

@@ -59,8 +59,8 @@ add_subdirectory(ffvii_font_exporter)
 add_subdirectory(ffvii_sound_dumper)
 add_subdirectory(ffvii_sound_dumper_psf)
 add_subdirectory(flevel)
-add_subdirectory(installer)
 add_subdirectory(lzs)
+add_subdirectory(q-gears-launcher)
 add_subdirectory(xeno_cd_extract)
 add_subdirectory(xeno_model_exporter)
 add_subdirectory(xeno_script_dumper)

+ 0 - 60
utilities/installer/CMakeLists.txt

@@ -1,60 +0,0 @@
-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
-	src/ff7DataInstaller.h
-)
-set(SOURCE_FILES
-    src/Main.cpp
-    src/mainwindow.cpp
-	src/ff7DataInstaller.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
-)
-
-add_executable(installer
-  ${HEADER_FILES}
-  ${SOURCE_FILES}
-  ${INSTALLER_FORM_HEADERS}
-  ${INSTALLER_HEADERS_MOC}
-)
-SET_PROPERTY(TARGET installer PROPERTY FOLDER "utilities")
-
-if (APPLE)
-target_link_libraries(installer "-framework CoreFoundation -framework Cocoa -framework IOKit")
-endif()
-
-if(WIN32)
-  set_target_properties(installer PROPERTIES WIN32_EXECUTABLE ON)
-  if (MSVC)
-    set_target_properties(installer PROPERTIES LINK_FLAGS "/SUBSYSTEM:CONSOLE")
-  endif()
-endif()
-
-set(LIBRARIES
-    Utility
-)
-
-target_link_libraries(installer    ${LIBRARIES} ${QT_LIBRARIES})
-
-install(TARGETS installer
-    DESTINATION .
-)

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

@@ -1,78 +0,0 @@
-#include "mainwindow.h"
-#include "ui_mainwindow.h"
-#include "ff7DataInstaller.h"
-#include <QDir>
-
-MainWindow::MainWindow(QWidget *parent) :
-    QMainWindow(parent),
-    ui(new Ui::MainWindow)
-{
-    ui->setupUi(this);
-    /*
-    * set any options here
-    */
-
-    // Default output to "home" dir
-    ui->lineOutput->setText(QDir::toNativeSeparators(QDir::homePath() + "/qgears"));
-
-#ifdef _DEBUG
-    // Hard coded prebaked paths for debugging to save time
-    ui->lineInput->setText("C:\\Games\\FF7\\data");
-    ui->lineOutput->setText("C:\\Users\\paul\\Desktop\\q-gears\\output\\_data");
-#endif
-}
-
-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()));
-
-        QString input = QDir::fromNativeSeparators(ui->lineInput->text());
-        if (!input.endsWith("/"))
-        {
-            input += "/";
-        }
-
-        QString output = QDir::fromNativeSeparators(ui->lineOutput->text());
-        if (!output.endsWith("/"))
-        {
-            output += "/";
-        }
-
-        // TODO: Enumerate files or find some better way to do this :)
-        std::vector<std::string> vec;
-        vec.push_back(QDir::toNativeSeparators("field/char.lgp").toStdString());
-        vec.push_back(QDir::toNativeSeparators("field/flevel.lgp").toStdString());
-
-        FF7DataInstaller conversion;
-        conversion.Convert(QDir::toNativeSeparators(input).toStdString(), QDir::toNativeSeparators(output).toStdString(), vec);
-    }
-}

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

@@ -1,30 +0,0 @@
-#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

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

@@ -1,125 +0,0 @@
-<?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>Install data</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>

+ 4 - 0
utilities/q-gears-launcher/.directory

@@ -0,0 +1,4 @@
+[Dolphin]
+Timestamp=2015,2,9,9,44,15
+Version=3
+ViewMode=1

+ 61 - 0
utilities/q-gears-launcher/CMakeLists.txt

@@ -0,0 +1,61 @@
+project( q-gears-launcher )
+cmake_minimum_required( VERSION 2.6 )
+set ( CMAKE_BUILD_TYPE Release )
+add_definitions ( -Wall )
+find_package ( Qt4 REQUIRED )
+include ( ${QT_USE_FILE} )
+include_directories (
+	${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
+	${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR}
+	)
+set ( q-gears-launcher_HDRS
+	src/mainwindow.h
+	src/ff7DataInstaller.h
+	)
+
+set ( q-gears-launcher_SRCS
+	src/main.cpp
+	src/mainwindow.cpp
+	src/ff7DataInstaller.cpp
+	)
+
+set ( q-gears-launcher_UIS
+	src/mainwindow.ui
+	)
+QT4_WRAP_UI(UIS ${q-gears-launcher_UIS})
+
+set ( q-gears-launcher_MOCS
+	src/mainwindow.h
+	)
+QT4_WRAP_CPP(MOCS ${q-gears-launcher_MOCS})
+
+add_definitions(
+    -DQGEARS_ADD_MANAGERS
+)
+add_executable ( q-gears-launcher ${q-gears-launcher_SRCS} ${UIS} ${RSCS} ${TRS} ${MOCS} )
+
+SET_PROPERTY(TARGET q-gears-launcher PROPERTY FOLDER "utilities")
+
+if (APPLE)
+target_link_libraries(q-gears-launcher "-framework CoreFoundation -framework Cocoa -framework IOKit")
+endif()
+
+if(WIN32)
+  set_target_properties(q-gears-launcher PROPERTIES WIN32_EXECUTABLE ON)
+  if (MSVC)
+    set_target_properties(q-gears-launcher PROPERTIES LINK_FLAGS "/SUBSYSTEM:CONSOLE")
+  endif()
+endif()
+
+set(LIBRARIES
+    Utility
+)
+
+
+target_link_libraries ( q-gears-launcher  ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${LIBRARIES})
+
+if(WIN32 OR APPLE)
+  install(TARGETS q-gears-launcher DESTINATION . ) 
+else()
+  install(TARGETS q-gears-launcher RUNTIME DESTINATION bin ) 
+endif()

+ 0 - 0
utilities/installer/src/ff7DataInstaller.cpp → utilities/q-gears-launcher/src/ff7DataInstaller.cpp


+ 0 - 0
utilities/installer/src/ff7DataInstaller.h → utilities/q-gears-launcher/src/ff7DataInstaller.h


+ 4 - 4
utilities/installer/src/Main.cpp → utilities/q-gears-launcher/src/main.cpp

@@ -3,9 +3,9 @@
 
 int main(int argc, char *argv[])
 {
-    QApplication a(argc, argv);
-    MainWindow w;
-    w.show();
+	QApplication a(argc, argv);
+	MainWindow w;
+	w.show();
 
-    return a.exec();
+	return a.exec();
 }

+ 110 - 0
utilities/q-gears-launcher/src/mainwindow.cpp

@@ -0,0 +1,110 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "ff7DataInstaller.h"
+#include <QProcess>
+#include <QFileDialog>
+#include <QDir>
+#include <QMessageBox>
+MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
+{
+	ui->setupUi(this);
+	//set default paths.
+	// TODO add code for platform detect.
+	//on linux
+	ui->lineConfigDir->setText(QString("%1/.q-gears").arg(QDir::homePath()));
+	ui->lineQGearsExe->setText(QString("/usr/games/q-gears"));
+	ui->lineOutput->setText(QString("%1/.q-gears/data").arg(QDir::homePath()));
+
+	//on windows
+	//	ui->lineConfigDir->setText(QString("%1/q-gears").arg(QDir::homePath()));
+	//	ui->lineQGearsExe->setText(QString("/usr/games/q-gears"));
+	//	ui->lineOutput->setText(QString("%1/q-gears/data").arg(QDir::homePath()));
+  #ifdef _DEBUG
+	  // Hard coded prebaked paths for debugging to save time
+	  ui->lineInput->setText("C:\\Games\\FF7\\data");
+	  ui->lineOutput->setText("C:\\Users\\paul\\Desktop\\q-gears\\output\\_data");
+  #endif
+
+}
+
+MainWindow::~MainWindow()
+{
+	delete ui;
+}
+
+void MainWindow::on_btnConfigDir_clicked()
+{
+	QString temp = QFileDialog::getExistingDirectory(this,tr("Select Location of QGears Configuration Data,"),QDir::homePath());
+	ui->lineConfigDir->setText(temp);
+}
+
+void MainWindow::on_btnLaunch_clicked()
+{
+	QString configDir(ui->lineConfigDir->text());
+	QString exe(ui->lineQGearsExe->text());
+
+	QStringList args;
+	args.append(QString("--resources-file=%1/resources.cfg").arg(ui->lineConfigDir->text()));
+	args.append(QString("--config-file=%1/q-gears.cfg").arg(ui->lineConfigDir->text()));
+	args.append(QString("--plugins-file=/%1/plugins.cfg").arg(ui->lineConfigDir->text()));
+
+	// Check that the config dir is set up correctly
+
+	QProcess qGears;
+	qGears.startDetached(exe,args,configDir);
+
+}
+void MainWindow::on_btnQGearsExe_clicked()
+{
+	QString temp = QFileDialog::getOpenFileName(this,tr("Location of QGears Executable,"),QDir::rootPath());
+	ui->lineQGearsExe->setText(temp);
+}
+
+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()));
+
+		QString input = QDir::fromNativeSeparators(ui->lineInput->text());
+		if (!input.endsWith("/"))
+		{
+			input += "/";
+		}
+
+		QString output = QDir::fromNativeSeparators(ui->lineOutput->text());
+		if (!output.endsWith("/"))
+		{
+			output += "/";
+		}
+
+		// TODO: Enumerate files or find some better way to do this :)
+		std::vector<std::string> vec;
+		vec.push_back(QDir::toNativeSeparators("field/char.lgp").toStdString());
+		vec.push_back(QDir::toNativeSeparators("field/flevel.lgp").toStdString());
+
+		FF7DataInstaller conversion;
+		conversion.Convert(QDir::toNativeSeparators(input).toStdString(), QDir::toNativeSeparators(output).toStdString(), vec);
+	}
+}

+ 30 - 0
utilities/q-gears-launcher/src/mainwindow.h

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

+ 218 - 0
utilities/q-gears-launcher/src/mainwindow.ui

@@ -0,0 +1,218 @@
+<?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>400</width>
+    <height>159</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>QGears Launcher</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QTabWidget" name="tabWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tab">
+       <attribute name="title">
+        <string>Q-Gears Config</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout">
+          <item>
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>QGears Path</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="lineQGearsExe"/>
+          </item>
+          <item>
+           <widget class="QPushButton" name="btnQGearsExe">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <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">
+            <property name="text">
+             <string>Config Directory</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="lineConfigDir"/>
+          </item>
+          <item>
+           <widget class="QPushButton" name="btnConfigDir">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <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="btnLaunch">
+          <property name="text">
+           <string>Run Q-Gears</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab_2">
+       <attribute name="title">
+        <string>Data Installer</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_3">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_4">
+          <item>
+           <widget class="QLabel" name="label_4">
+            <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_3">
+          <item>
+           <widget class="QLabel" name="label_3">
+            <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>Install data</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>400</width>
+     <height>22</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <addaction name="actionExit"/>
+   </widget>
+   <addaction name="menuFile"/>
+  </widget>
+  <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>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>199</x>
+     <y>66</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>