Exemplo n.º 1
0
   EditorMainWindow::EditorMainWindow(EditorApplication* app, QWidget* parent)
      : QMainWindow(parent)
      , mApplication(app)
      , mEntityTreeDock(NULL)
      , mSpawnersDock(NULL)
      , mPropertyEditorDock(NULL)
   {

      mUpdateTimer = new QTimer(this);
      connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(EmitQueuedMessages()));
      mUpdateTimer->start(100);


      // register local message pump to receive messages from game message pump
      dtEntity::MessageFunctor functor(&mMessagePump, &dtEntity::MessagePump::EnqueueMessage);
      dtEntity::EntityManager& em = mApplication->GetEntityManager();
      em.RegisterForMessages(dtEntity::ToolsUpdatedMessage::TYPE, functor);
      em.RegisterForMessages(dtEntity::SceneLoadedMessage::TYPE, functor);
      em.RegisterForMessages(dtEntity::SceneUnloadedMessage::TYPE, functor);
      em.RegisterForMessages(dtEntity::MapLoadedMessage::TYPE, functor);
      em.RegisterForMessages(dtEntity::MapUnloadedMessage::TYPE, functor);

      mMessagePump.RegisterForMessages(dtEntity::ToolsUpdatedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnToolsUpdated));
      mMessagePump.RegisterForMessages(dtEntity::SceneLoadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnSceneLoaded));
      mMessagePump.RegisterForMessages(dtEntity::SceneUnloadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnSceneUnloaded));
      mMessagePump.RegisterForMessages(dtEntity::MapLoadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnMapLoaded));
      mMessagePump.RegisterForMessages(dtEntity::MapUnloadedMessage::TYPE, dtEntity::MessageFunctor(this, &EditorMainWindow::OnMapUnloaded));


      setMinimumSize(800, 600);
      layout()->setContentsMargins(0, 0, 0, 0);

      setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowTabbedDocks |
                     QMainWindow::VerticalTabs);


      setWindowTitle("dtEntity Editor");

      createActions();
      createMenus();
      createToolBars();
      CreateDockWidgets();

      connect(this, SIGNAL(LoadScene(const QString&)), app, SLOT(LoadScene(const QString&)));
      connect(this, SIGNAL(NewScene()), app, SLOT(NewScene()));
      connect(this, SIGNAL(SaveScene(QString)), app, SLOT(SaveScene(QString)));

   }
HoIModDesigner::HoIModDesigner(QWidget *parent)
	: QMainWindow(parent),
	m_DockWidgetNationList(nullptr),
	m_DockWidgetNationDetails(nullptr),
	m_Parser(nullptr)
{
	ui.setupUi(this);

	QIcon recycle(":HoIModDesigner/images/exit.ico");
	QList<QSize> sizes = recycle.availableSizes();

	m_ExitAction = new QAction(recycle,tr("E&xit"), this);
	m_ExitAction->setShortcuts(QKeySequence::Quit);
	m_ExitAction->setStatusTip(tr("Quit Scenediagram example"));
	connect(m_ExitAction, SIGNAL(triggered()), this, SLOT(close()));

	m_LoadMapAction = new QAction(QIcon(":HoIModDesigner/images/folder_document.ico"),tr("Load"),this );
	m_LoadMapAction->setStatusTip(tr("Load HoI3 map"));
	connect(m_LoadMapAction, SIGNAL(triggered()), this, SLOT(LoadMap()));

	m_SaveChangesAction = new QAction(QIcon(":HoIModDesigner/images/floppy_disk.ico"),tr("Save"),this );
	m_SaveChangesAction->setStatusTip(tr("Save changes"));
	connect(m_SaveChangesAction, SIGNAL(triggered()), this, SLOT(SaveChanges()));

	m_FileConfigurationAction = new QAction(QIcon(":HoIModDesigner/images/gear.ico"),tr("Configuration..."),this );
	m_FileConfigurationAction->setStatusTip(tr("Open configuration dialog"));
	connect(m_FileConfigurationAction, SIGNAL(triggered()), this, SLOT(OpenConfigurationDialog()));

	m_AboutAction = new QAction(QIcon(":HoIModDesigner/images/about.ico"),tr("About..."),this );
	m_AboutAction->setStatusTip(tr("Show about dialog"));
//	connect(m_AboutAction, SIGNAL(triggered()), this, SLOT(About()));

	m_FileMenu = menuBar()->addMenu(tr("&File"));
	m_FileMenu->addAction( m_LoadMapAction );
	m_FileMenu->addAction( m_SaveChangesAction );
	m_FileMenu->addSeparator();
	m_FileMenu->addAction( m_FileConfigurationAction );
	m_FileMenu->addSeparator();
	m_FileMenu->addAction( m_ExitAction );

	m_DockWidgetsMenu = menuBar()->addMenu("Windows");

	m_HilfeMenu = menuBar()->addMenu(tr("Help"));
	m_HilfeMenu->addAction( m_AboutAction );

	m_FileToolBar = addToolBar(tr("Edit"));
	m_FileToolBar->addAction(m_ExitAction);
	m_FileToolBar->addAction(m_LoadMapAction);
	m_FileToolBar->addAction(m_SaveChangesAction);

	m_ShowOriginalMap = new QAction(QIcon("images/test.png"),tr("Original"), this);
	m_ShowOriginalMap->setStatusTip(tr("Shows original map"));
	connect(m_ShowOriginalMap, SIGNAL(triggered()), this, SLOT(ShowOriginalMap()));

	m_ShowNationColorMap = new QAction(QIcon(":HoIModDesigner/images/mapmode_political.ico"),tr("Nations"), this);
	m_ShowNationColorMap->setStatusTip(tr("Shows map by country colors"));
	connect(m_ShowNationColorMap, SIGNAL(triggered()), this, SLOT(ShowNationColorMap()));

	m_ShowMetalProvinces = new FilterAction(QIcon(":HoIModDesigner/images/resource_metal.ico"),tr("Metal"), new TimeLineDataCriteriaMetal(), this);
	m_ShowMetalProvinces->setStatusTip(tr("Shows only provinces with metal"));

	m_ShowOilProvinces = new FilterAction(QIcon(":HoIModDesigner/images/resource_oil.ico"),tr("Crude oil"), new TimeLineDataCriteriaCrudeOil(), this);
	m_ShowOilProvinces->setStatusTip(tr("Shows only provinces with crude oil"));

	m_ShowEnergyProvinces = new FilterAction(QIcon(":HoIModDesigner/images/resource_energy.ico"),tr("Energy"), new TimeLineDataCriteriaEnergy(), this);
	m_ShowEnergyProvinces->setStatusTip(tr("Shows only provinces with energy"));

	m_ShowRareProvinces = new FilterAction(QIcon(":HoIModDesigner/images/resource_raremat.ico"),tr("Rare material"), new TimeLineDataCriteriaRareMaterial(), this);
	m_ShowRareProvinces->setStatusTip(tr("Shows only provinces with rare material"));

	m_ShowIndustryProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_factory.ico"),tr("Industry"), new TimeLineDataCriteriaIndustry(), this);
	m_ShowIndustryProvinces->setStatusTip(tr("Shows only provinces with industry"));

	m_ShowAAProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_aa.ico"),tr("Antiair"), new TimeLineDataCriteriaAntiair(), this);
	m_ShowAAProvinces->setStatusTip(tr("Shows only provinces with antiair"));

	m_ShowAirbaseProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_airbase.ico"),tr("Airbase"), new TimeLineDataCriteriaAirbase(), this);
	m_ShowAirbaseProvinces->setStatusTip(tr("Shows only provinces with airbase"));

	m_ShowCoastalfortProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_coastalfort.ico"),tr("Coastalfort"), new TimeLineDataCriteriaCoastalfort(), this);
	m_ShowCoastalfortProvinces->setStatusTip(tr("Shows only provinces with coastalfort"));

	m_ShowInfraProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_infra.ico"),tr("Infrastructure"), new TimeLineDataCriteriaInfrastructure(), this);
	m_ShowInfraProvinces->setStatusTip(tr("Shows only provinces with infrastructure"));

	m_ShowLandfortProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_landfort.ico"),tr("Landfort"), new TimeLineDataCriteriaLandfort(), this);
	m_ShowLandfortProvinces->setStatusTip(tr("Shows only provinces with landfort"));

	m_ShowNavalbaseProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_navalbase.ico"),tr("Navalbase"), new TimeLineDataCriteriaNavalbase(), this);
	m_ShowNavalbaseProvinces->setStatusTip(tr("Shows only provinces with navalbase"));

	m_ShowNuclearProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_nuclear.ico"),tr("Nuclear"), new TimeLineDataCriteriaNuclear(), this);
	m_ShowNuclearProvinces->setStatusTip(tr("Shows only provinces with nuclear"));

	m_ShowRadarProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_radar.ico"),tr("Radar"), new TimeLineDataCriteriaRadar(), this);
	m_ShowRadarProvinces->setStatusTip(tr("Shows only provinces with radar"));

	m_ShowRocketProvinces  = new FilterAction(QIcon(":HoIModDesigner/images/icon_build_rocket.ico"),tr("Rocket"), new TimeLineDataCriteriaRocket(), this);
	m_ShowRocketProvinces->setStatusTip(tr("Shows only provinces with rocket"));

	m_MapFilterToolBar = addToolBar(tr("Map filter"));
	m_MapFilterToolBar->addAction(m_ShowOriginalMap);
	m_MapFilterToolBar->addAction(m_ShowNationColorMap);
	m_MapFilterToolBar->addAction(m_ShowEnergyProvinces);
	m_MapFilterToolBar->addAction(m_ShowMetalProvinces);
	m_MapFilterToolBar->addAction(m_ShowRareProvinces);
	m_MapFilterToolBar->addAction(m_ShowOilProvinces);
	m_MapFilterToolBar->addAction(m_ShowIndustryProvinces);
	m_MapFilterToolBar->addAction(m_ShowAAProvinces);
	m_MapFilterToolBar->addAction(m_ShowAirbaseProvinces);
	m_MapFilterToolBar->addAction(m_ShowCoastalfortProvinces);
	m_MapFilterToolBar->addAction(m_ShowInfraProvinces);
	m_MapFilterToolBar->addAction(m_ShowLandfortProvinces);
	m_MapFilterToolBar->addAction(m_ShowNavalbaseProvinces);
	m_MapFilterToolBar->addAction(m_ShowNuclearProvinces);
	m_MapFilterToolBar->addAction(m_ShowRadarProvinces);
	m_MapFilterToolBar->addAction(m_ShowRocketProvinces);

	QToolButton *button2 = new QToolButton;
	button2->setText("Testicon2");
	button2->setIcon(QIcon(":HoIModDesigner/images/add2.ico"));
	button2->setIconSize(QSize(48, 48));
	button2->setCheckable(true);
	connect(button2,SIGNAL(clicked()),this,SLOT(DisplayContourMap()));
	
	QToolButton *button5 = new QToolButton;
	button5->setText("Testicon3");
	button5->setIcon(QIcon(":HoIModDesigner/images/add2.ico"));
	button5->setIconSize(QSize(48, 48));
	button5->setCheckable(true);

	QGridLayout *layout = new QGridLayout;
	layout->addWidget(button2, 0, 0, Qt::AlignHCenter);
	layout->addWidget(button5, 1, 0, Qt::AlignHCenter);

	QWidget *widget = new QWidget;
	widget->setLayout(layout);

	QGridLayout *backgroundLayout = new QGridLayout;
	backgroundLayout->addWidget(widget, 0, 0);

	QButtonGroup *paintEvents = new QButtonGroup(this);
	paintEvents->setExclusive(true);
	QVBoxLayout *layoutPaintEvents = new QVBoxLayout;
	int buttonID = 0;
	m_PainterWidgets.append(CreatePaintButton( tr("Owner"), "D:/Spiele/HoI3/gfx/interface/mapmode_political.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Energy"), "D:/Spiele/HoI3/tfh/gfx/mapitems/resource_energy.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Metal"), "D:/Spiele/HoI3/tfh/gfx/mapitems/resource_metal.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Rare materials"), "D:/Spiele/HoI3/tfh/gfx/mapitems/resource_raremat.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Crude oil"), "D:/Spiele/HoI3/tfh/gfx/mapitems/resource_oil.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Industry"), "D:/Spiele/HoI3/gfx/interface/prov_build_factory.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Infrastructure"), "D:/Spiele/HoI3/gfx/interface/prov_build_infra.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Anti air"), "D:/Spiele/HoI3/gfx/interface/prov_build_aa.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Airfield"), "D:/Spiele/HoI3/gfx/interface/prov_build_airfield.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Landfort"), "D:/Spiele/HoI3/gfx/interface/prov_build_landfort.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Coastfort"), "D:/Spiele/HoI3/gfx/interface/prov_build_coastfort.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Naval base"), "D:/Spiele/HoI3/gfx/interface/prov_build_navalbase.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Nuclear"), "D:/Spiele/HoI3/gfx/interface/prov_build_nuclear.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Radar"), "D:/Spiele/HoI3/gfx/interface/prov_build_radar.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Rocket"), "D:/Spiele/HoI3/gfx/interface/prov_build_rocket.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Leadership"), "D:/Spiele/HoI3/gfx/interface/icon_leadership.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Manpower"), "D:/Spiele/HoI3/gfx/interface/icon_manpower.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Points"), "D:/Spiele/HoI3/gfx/interface/mapmode_vp.dds", paintEvents, buttonID++ ));
	m_PainterWidgets.append(CreatePaintButton( tr("Controller"), "D:/Spiele/HoI3/gfx/interface/mapmode_political.dds", paintEvents, buttonID++ ));
	for( int i=0; i < m_PainterWidgets.size();i++ )
	{
		layoutPaintEvents->addWidget( m_PainterWidgets.at(i) );
	}

	connect(paintEvents,SIGNAL(buttonClicked(int)),this,SLOT(SetFactoryForExtendedScene(int)));
	
	QWidget *itemWidget = new QWidget;
	itemWidget->setLayout(layoutPaintEvents);

	m_ToolBox = new QToolBox;
	m_ToolBox->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Ignored));
	m_ToolBox->setMinimumWidth(itemWidget->sizeHint().width());
	m_ToolBox->addItem(widget, tr("Test group"));
	m_ToolBox->addItem(itemWidget, tr("Painters"));

	QHBoxLayout *layoutMain = new QHBoxLayout;
	layoutMain->addWidget(m_ToolBox);
	m_View = new ExtendedGraphicsView(this);
	m_View->setMouseTracking(true);
	m_View->setInteractive(true);
	m_View->setOptimizationFlags(QGraphicsView::DontClipPainter);
	m_View->setOptimizationFlags(QGraphicsView::DontSavePainterState);
	m_View->setOptimizationFlags(QGraphicsView::DontAdjustForAntialiasing);
	m_View->setCacheMode(QGraphicsView::CacheBackground);
	layoutMain->addWidget(m_View);

	QWidget *widgetMain = new QWidget;
	widgetMain->setLayout(layoutMain);

	CreateDockWidgets();

	setCentralWidget(widgetMain);
	setWindowState(windowState() | Qt::WindowMaximized);

	connect(m_View->m_Scene, SIGNAL(SignalProvinceEntered(ProvinceItem*)),m_View->m_Scene, SLOT(SlotProvinceEntered(ProvinceItem*)));
	connect(m_View->m_Scene, SIGNAL(SignalProvinceMouseReleased(ProvinceItem*)),this, SLOT(SlotProvinceMouseReleased(ProvinceItem*)));

	jha::LogInterface().Init();
	jha::GetLog()->RegisterLogger( new jha::LoggerFile("d:/temp/Logfile.log") );
	jha::GetLog()->RegisterLogger( new jha::LoggerTableWidget(m_DockWidgetLogging) );
	jha::GetLog()->Start();
}