2011-12-25 21:19:32 +00:00
# include "mainwindow.h"
2012-01-08 10:31:01 +00:00
# include <QApplication>
# include <QMenuBar>
2012-01-23 23:45:33 +00:00
# include <QMenu>
2012-02-20 21:17:13 +00:00
# include <QIcon>
2012-04-11 19:59:50 +00:00
# include <QToolBar>
2012-01-08 10:31:01 +00:00
# include <QFileDialog>
2012-01-23 23:45:33 +00:00
# include <QTabWidget>
2012-02-28 13:45:11 +00:00
# include <QTranslator>
# include <QLocale>
2012-04-09 08:33:13 +00:00
# include <QMessageBox>
2012-12-14 16:16:09 +00:00
# include <QSplashScreen>
2012-01-08 10:31:01 +00:00
2012-04-29 15:14:37 +00:00
# include "basepreview.h"
2012-01-26 23:08:09 +00:00
# include "formclouds.h"
2012-11-25 21:53:01 +00:00
# include "formatmosphere.h"
2012-01-22 18:39:42 +00:00
# include "formterrain.h"
2012-01-26 23:08:09 +00:00
# include "formtextures.h"
2011-12-25 21:19:32 +00:00
# include "formwater.h"
2012-01-06 16:09:03 +00:00
# include "formrender.h"
2012-01-26 23:08:09 +00:00
2012-01-10 20:51:27 +00:00
# include "dialogrender.h"
2012-06-08 12:54:57 +00:00
# include "dialogexplorer.h"
2011-12-25 21:19:32 +00:00
2013-04-17 12:29:51 +00:00
# include "rendering/main.h"
# include "rendering/auto.h"
# include "rendering/scenery.h"
2012-06-27 10:30:00 +00:00
# include "tools.h"
2012-01-05 18:39:17 +00:00
int main ( int argc , char * * argv )
2011-12-25 21:19:32 +00:00
{
2012-02-28 13:45:11 +00:00
MainWindow * window ;
2012-12-14 16:16:09 +00:00
QSplashScreen * splash ;
2012-02-12 16:57:29 +00:00
int result ;
2012-04-28 13:36:37 +00:00
2012-01-05 18:39:17 +00:00
QApplication app ( argc , argv ) ;
2012-04-28 13:36:37 +00:00
2013-04-17 12:29:51 +00:00
splash = new QSplashScreen ( QPixmap ( getDataPath ( " images/logo_256.png " ) ) ) ;
2012-12-14 16:16:09 +00:00
splash - > show ( ) ;
2012-02-28 13:45:11 +00:00
QTranslator qtTranslator ;
QTranslator myTranslator ;
2012-04-28 13:36:37 +00:00
2013-04-17 12:29:51 +00:00
if ( myTranslator . load ( " paysages_ " + QLocale : : system ( ) . name ( ) , " ./data/i18n " ) )
2012-02-28 13:45:11 +00:00
{
app . installTranslator ( & myTranslator ) ;
qtTranslator . load ( " qt_ " + QLocale : : system ( ) . name ( ) ) ;
app . installTranslator ( & qtTranslator ) ;
}
else
{
qtTranslator . load ( " qt_en " ) ;
app . installTranslator ( & qtTranslator ) ;
}
2012-12-24 15:15:40 +00:00
//splash->showMessage(app.tr("Preloading..."), Qt::AlignCenter, Qt::white);
2012-12-14 16:16:09 +00:00
app . processEvents ( ) ;
paysagesInit ( ) ;
2012-04-29 15:14:37 +00:00
BasePreview : : initDrawers ( ) ;
2012-12-09 17:49:28 +00:00
2012-02-28 13:45:11 +00:00
window = new MainWindow ( ) ;
window - > show ( ) ;
2012-12-14 16:16:09 +00:00
splash - > finish ( window ) ;
delete splash ;
2012-01-05 18:39:17 +00:00
2012-02-12 16:57:29 +00:00
result = app . exec ( ) ;
2012-04-28 13:36:37 +00:00
2012-04-30 19:25:30 +00:00
BasePreview : : stopDrawers ( ) ;
2012-02-28 13:45:11 +00:00
delete window ;
2012-04-28 13:36:37 +00:00
2012-02-12 16:57:29 +00:00
paysagesQuit ( ) ;
return result ;
2011-12-25 21:19:32 +00:00
}
2012-01-05 18:39:17 +00:00
MainWindow : : MainWindow ( QWidget * parent ) :
2012-04-28 13:36:37 +00:00
QMainWindow ( parent )
2011-12-25 21:19:32 +00:00
{
2012-01-26 22:30:20 +00:00
BaseForm * form ;
2012-01-05 18:39:17 +00:00
QTabWidget * tabs ;
2012-04-11 19:59:50 +00:00
QToolBar * toolbar ;
2012-04-28 13:36:37 +00:00
2012-01-05 18:39:17 +00:00
tabs = new QTabWidget ( this ) ;
2013-04-11 14:38:40 +00:00
tabs - > setIconSize ( QSize ( 32 , 32 ) ) ;
2012-01-26 22:30:20 +00:00
form = new FormTerrain ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( form , QIcon ( getDataPath ( " images/tab_terrain.png " ) ) , tr ( " Terrain " ) ) ;
2012-08-26 13:06:42 +00:00
QObject : : connect ( form , SIGNAL ( configApplied ( ) ) , this , SLOT ( refreshAll ( ) ) , Qt : : QueuedConnection ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( form ) ;
2012-01-26 22:30:20 +00:00
2012-01-26 23:08:09 +00:00
form = new FormTextures ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( form , QIcon ( getDataPath ( " images/tab_textures.png " ) ) , tr ( " Textures " ) ) ;
2012-08-26 13:06:42 +00:00
QObject : : connect ( form , SIGNAL ( configApplied ( ) ) , this , SLOT ( refreshAll ( ) ) , Qt : : QueuedConnection ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( form ) ;
2012-01-26 23:08:09 +00:00
2012-01-26 22:30:20 +00:00
form = new FormWater ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( form , QIcon ( getDataPath ( " images/tab_water.png " ) ) , tr ( " Water " ) ) ;
2012-08-26 13:06:42 +00:00
QObject : : connect ( form , SIGNAL ( configApplied ( ) ) , this , SLOT ( refreshAll ( ) ) , Qt : : QueuedConnection ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( form ) ;
2012-01-26 22:30:20 +00:00
2012-03-18 21:00:50 +00:00
form = new FormAtmosphere ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( form , QIcon ( getDataPath ( " images/tab_atmosphere.png " ) ) , tr ( " Atmosphere " ) ) ;
2012-08-26 13:06:42 +00:00
QObject : : connect ( form , SIGNAL ( configApplied ( ) ) , this , SLOT ( refreshAll ( ) ) , Qt : : QueuedConnection ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( form ) ;
2012-03-18 21:00:50 +00:00
2012-01-26 23:08:09 +00:00
form = new FormClouds ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( form , QIcon ( getDataPath ( " images/tab_clouds.png " ) ) , tr ( " Clouds " ) ) ;
2012-08-26 13:06:42 +00:00
QObject : : connect ( form , SIGNAL ( configApplied ( ) ) , this , SLOT ( refreshAll ( ) ) , Qt : : QueuedConnection ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( form ) ;
2012-01-26 23:08:09 +00:00
2012-04-02 19:38:59 +00:00
_form_render = new FormRender ( tabs ) ;
2013-04-17 12:29:51 +00:00
tabs - > addTab ( _form_render , QIcon ( getDataPath ( " images/tab_render.png " ) ) , tr ( " Render " ) ) ;
2012-07-05 18:14:51 +00:00
_forms . append ( _form_render ) ;
2012-01-05 18:39:17 +00:00
2012-04-11 19:59:50 +00:00
toolbar = new QToolBar ( this ) ;
toolbar - > setOrientation ( Qt : : Vertical ) ;
toolbar - > setAllowedAreas ( Qt : : LeftToolBarArea ) ;
toolbar - > setMovable ( false ) ;
toolbar - > setFloatable ( false ) ;
toolbar - > setToolButtonStyle ( Qt : : ToolButtonTextUnderIcon ) ;
toolbar - > toggleViewAction ( ) - > setEnabled ( false ) ;
toolbar - > setIconSize ( QSize ( 32 , 32 ) ) ;
addToolBar ( Qt : : LeftToolBarArea , toolbar ) ;
2012-04-28 13:36:37 +00:00
2013-04-17 12:29:51 +00:00
toolbar - > addAction ( QIcon ( getDataPath ( " images/new.png " ) ) , tr ( " &New " ) , this , SLOT ( fileNew ( ) ) ) - > setShortcut ( QKeySequence ( tr ( " Crtl+N " ) ) ) ;
toolbar - > addAction ( QIcon ( getDataPath ( " images/save.png " ) ) , tr ( " &Save " ) , this , SLOT ( fileSave ( ) ) ) - > setShortcut ( QKeySequence ( tr ( " Crtl+S " ) ) ) ;
toolbar - > addAction ( QIcon ( getDataPath ( " images/load.png " ) ) , tr ( " &Load " ) , this , SLOT ( fileLoad ( ) ) ) - > setShortcut ( QKeySequence ( tr ( " Crtl+L " ) ) ) ;
toolbar - > addAction ( QIcon ( getDataPath ( " images/explore.png " ) ) , tr ( " &Explore (F2) " ) , this , SLOT ( explore3D ( ) ) ) - > setShortcut ( QKeySequence ( tr ( " F2 " ) ) ) ;
toolbar - > addAction ( QIcon ( getDataPath ( " images/render.png " ) ) , tr ( " &Quick \n render (F5) " ) , this , SLOT ( quickPreview ( ) ) ) - > setShortcut ( QKeySequence ( tr ( " F5 " ) ) ) ;
toolbar - > addAction ( QIcon ( getDataPath ( " images/about.png " ) ) , tr ( " &About " ) , this , SLOT ( showAboutDialog ( ) ) ) ;
2012-12-09 17:49:28 +00:00
2012-01-05 18:39:17 +00:00
setCentralWidget ( tabs ) ;
2012-01-16 21:29:21 +00:00
setWindowTitle ( " Paysages 3D " ) ;
2013-04-17 12:29:51 +00:00
setWindowIcon ( QIcon ( getDataPath ( " images/logo_32.png " ) ) ) ;
2012-12-09 17:49:28 +00:00
2012-06-27 10:30:00 +00:00
scenerySetCustomDataCallback ( MainWindow : : guiSaveCallback , MainWindow : : guiLoadCallback , this ) ;
2012-12-09 17:49:28 +00:00
2012-06-26 19:36:50 +00:00
refreshAll ( ) ;
2011-12-25 21:19:32 +00:00
}
2012-01-08 10:31:01 +00:00
2012-06-02 09:46:24 +00:00
bool MainWindow : : event ( QEvent * event )
{
if ( event - > type ( ) = = QEvent : : WindowActivate )
{
BasePreview : : reviveAll ( ) ;
}
2012-12-09 17:49:28 +00:00
2012-06-02 09:46:24 +00:00
return QMainWindow : : event ( event ) ;
}
2012-01-10 20:51:27 +00:00
void MainWindow : : refreshAll ( )
{
2012-06-27 10:30:00 +00:00
logDebug ( " [MainWindow] Refreshing whole UI " ) ;
2012-12-09 17:49:28 +00:00
2012-06-25 20:11:15 +00:00
// Refresh all tabs
2012-07-05 18:14:51 +00:00
for ( int i = 0 ; i < _forms . size ( ) ; i + + )
2012-01-10 20:51:27 +00:00
{
2012-07-05 18:14:51 +00:00
_forms [ i ] - > revertConfig ( ) ;
2012-01-10 20:51:27 +00:00
}
2012-12-09 17:49:28 +00:00
2012-06-25 20:11:15 +00:00
// Refresh preview OSD
2012-06-26 19:36:50 +00:00
CameraDefinition camera = cameraCreateDefinition ( ) ;
PreviewOsd * osd = PreviewOsd : : getInstance ( QString ( " geolocation " ) ) ;
osd - > clearItems ( ) ;
sceneryGetCamera ( & camera ) ;
2012-06-27 09:48:55 +00:00
PreviewOsdItem * item = osd - > newItem ( 50 , 50 ) ;
item - > drawCamera ( & camera ) ;
item - > setToolTip ( QString ( tr ( " Camera " ) ) ) ;
2012-06-26 19:36:50 +00:00
cameraDeleteDefinition ( & camera ) ;
2012-01-10 20:51:27 +00:00
}
2012-01-08 10:31:01 +00:00
void MainWindow : : fileNew ( )
{
2012-04-16 19:24:46 +00:00
if ( QMessageBox : : question ( this , tr ( " Paysages 3D - New scenery " ) , tr ( " Do you want to start a new scenery ? Any unsaved changes will be lost. " ) , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : No ) = = QMessageBox : : Yes )
2012-04-16 18:28:40 +00:00
{
autoGenRealisticLandscape ( 0 ) ;
refreshAll ( ) ;
}
2012-01-08 10:31:01 +00:00
}
void MainWindow : : fileSave ( )
{
2012-04-16 19:24:46 +00:00
QString filepath = QFileDialog : : getSaveFileName ( this , tr ( " Paysages 3D - Choose a file to save the scenery " ) , QString ( ) , tr ( " Paysages 3D Scenery (*.p3d) " ) ) ;
2012-01-10 20:51:27 +00:00
if ( ! filepath . isNull ( ) )
{
2012-04-16 19:24:46 +00:00
if ( ! filepath . toLower ( ) . endsWith ( " .p3d " ) )
{
filepath = filepath . append ( " .p3d " ) ;
}
2012-04-28 13:36:37 +00:00
FileOperationResult result = paysagesSave ( ( char * ) filepath . toStdString ( ) . c_str ( ) ) ;
switch ( result )
{
case FILE_OPERATION_OK :
break ;
case FILE_OPERATION_IOERROR :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File saving error " ) , tr ( " Can't write specified file : %1 " ) . arg ( filepath ) ) ;
break ;
default :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File saving error " ) , tr ( " Unexpected error while saving file : %1 " ) . arg ( filepath ) ) ;
}
2012-01-10 20:51:27 +00:00
}
2012-01-08 10:31:01 +00:00
}
void MainWindow : : fileLoad ( )
{
2012-04-16 19:24:46 +00:00
if ( QMessageBox : : question ( this , tr ( " Paysages 3D - Load scenery " ) , tr ( " Do you want to load a scenery from file ? Any unsaved changes will be lost. " ) , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : No ) = = QMessageBox : : Yes )
2012-01-10 20:51:27 +00:00
{
2012-04-16 19:24:46 +00:00
QString filepath = QFileDialog : : getOpenFileName ( this , tr ( " Paysages 3D - Choose a scenery file to load " ) , QString ( ) , tr ( " Paysages 3D Scenery (*.p3d) " ) ) ;
2012-04-16 18:28:40 +00:00
if ( ! filepath . isNull ( ) )
{
2012-04-28 13:36:37 +00:00
FileOperationResult result = paysagesLoad ( ( char * ) filepath . toStdString ( ) . c_str ( ) ) ;
switch ( result )
{
case FILE_OPERATION_OK :
refreshAll ( ) ;
break ;
case FILE_OPERATION_IOERROR :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File loading error " ) , tr ( " Can't read specified file : %1 " ) . arg ( filepath ) ) ;
break ;
case FILE_OPERATION_APP_MISMATCH :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File loading error " ) , tr ( " This file doesn't look like a Paysages 3D file : %1 " ) . arg ( filepath ) ) ;
break ;
case FILE_OPERATION_VERSION_MISMATCH :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File loading error " ) , tr ( " This file was created with an incompatible Paysages 3D version : %1 " ) . arg ( filepath ) ) ;
break ;
default :
QMessageBox : : critical ( this , tr ( " Paysages 3D - File loading error " ) , tr ( " Unexpected error while loading file : %1 " ) . arg ( filepath ) ) ;
}
2012-04-16 18:28:40 +00:00
}
2012-01-10 20:51:27 +00:00
}
}
2012-04-05 17:47:43 +00:00
void MainWindow : : showAboutDialog ( )
{
2012-05-01 10:43:33 +00:00
QMessageBox : : about ( this , tr ( " Paysages 3D " ) , tr ( " A 3D landscape editing and rendering software. \n \n Authors : \n Programming - Michael Lemaire \n \n Credits : \n Qt - http://qt.nokia.com/ \n DevIL - http://openil.sourceforge.net/ \n GLib - http://www.gtk.org/ \n " ) ) ;
2012-04-05 17:47:43 +00:00
}
2012-01-10 20:51:27 +00:00
void MainWindow : : quickPreview ( )
{
2012-04-02 19:38:59 +00:00
_form_render - > startQuickRender ( ) ;
2012-01-08 10:31:01 +00:00
}
2012-01-26 23:08:09 +00:00
void MainWindow : : explore3D ( )
{
2012-01-27 14:47:08 +00:00
CameraDefinition camera ;
2012-04-12 20:20:57 +00:00
int result ;
2012-01-27 14:47:08 +00:00
sceneryGetCamera ( & camera ) ;
2012-06-08 12:54:57 +00:00
DialogExplorer * dialog = new DialogExplorer ( this , & camera , true ) ;
2012-04-12 20:20:57 +00:00
result = dialog - > exec ( ) ;
2012-04-28 13:36:37 +00:00
2012-01-26 23:08:09 +00:00
delete dialog ;
2012-04-28 13:36:37 +00:00
2012-04-12 20:20:57 +00:00
if ( result = = QDialog : : Accepted )
{
scenerySetCamera ( & camera ) ;
refreshAll ( ) ;
}
2012-01-26 23:08:09 +00:00
}
2012-06-27 10:30:00 +00:00
void MainWindow : : guiSaveCallback ( PackStream * stream , void * data )
{
( ( MainWindow * ) data ) - > guiSave ( stream ) ;
}
void MainWindow : : guiLoadCallback ( PackStream * stream , void * data )
{
( ( MainWindow * ) data ) - > guiLoad ( stream ) ;
}
void MainWindow : : guiSave ( PackStream * stream )
{
// Save all tabs status
2012-07-05 18:14:51 +00:00
for ( int i = 0 ; i < _forms . size ( ) ; i + + )
2012-06-27 10:30:00 +00:00
{
2012-07-05 18:14:51 +00:00
_forms [ i ] - > savePack ( stream ) ;
2012-06-27 10:30:00 +00:00
}
}
void MainWindow : : guiLoad ( PackStream * stream )
{
// Load all tabs status
2012-07-05 18:14:51 +00:00
for ( int i = 0 ; i < _forms . size ( ) ; i + + )
2012-06-27 10:30:00 +00:00
{
2012-07-05 18:14:51 +00:00
_forms [ i ] - > loadPack ( stream ) ;
2012-06-27 10:30:00 +00:00
}
}