2011-06-16 15:53:39 -06:00
|
|
|
/*
|
|
|
|
https://github.com/peterix/dfhack
|
|
|
|
Copyright (c) 2009-2011 Petr Mrázek (peterix@gmail.com)
|
|
|
|
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
|
warranty. In no event will the authors be held liable for any
|
|
|
|
damages arising from the use of this software.
|
|
|
|
|
|
|
|
Permission is granted to anyone to use this software for any
|
|
|
|
purpose, including commercial applications, and to alter it and
|
|
|
|
redistribute it freely, subject to the following restrictions:
|
|
|
|
|
|
|
|
1. The origin of this software must not be misrepresented; you must
|
|
|
|
not claim that you wrote the original software. If you use this
|
|
|
|
software in a product, an acknowledgment in the product documentation
|
|
|
|
would be appreciated but is not required.
|
|
|
|
|
|
|
|
2. Altered source versions must be plainly marked as such, and
|
|
|
|
must not be misrepresented as being the original software.
|
|
|
|
|
|
|
|
3. This notice may not be removed or altered from any source
|
|
|
|
distribution.
|
|
|
|
*/
|
|
|
|
|
2011-04-10 05:12:28 -06:00
|
|
|
#pragma once
|
2010-04-04 16:48:19 -06:00
|
|
|
#ifndef CL_MOD_GUI
|
|
|
|
#define CL_MOD_GUI
|
|
|
|
|
2011-12-31 04:48:42 -07:00
|
|
|
#include "Export.h"
|
|
|
|
#include "Module.h"
|
|
|
|
#include "Virtual.h"
|
|
|
|
#include "BitArray.h"
|
2011-07-09 03:33:58 -06:00
|
|
|
#include <string>
|
2010-04-04 16:48:19 -06:00
|
|
|
|
2012-01-24 21:18:21 -07:00
|
|
|
#include "DataDefs.h"
|
|
|
|
#include "df/init.h"
|
|
|
|
#include "df/ui.h"
|
|
|
|
|
2012-01-07 08:21:07 -07:00
|
|
|
namespace df {
|
|
|
|
struct viewscreen;
|
|
|
|
struct job;
|
2012-01-14 08:31:43 -07:00
|
|
|
struct unit;
|
|
|
|
struct item;
|
2012-01-07 08:21:07 -07:00
|
|
|
};
|
|
|
|
|
2011-03-18 04:09:26 -06:00
|
|
|
/**
|
|
|
|
* \defgroup grp_gui query DF's GUI state
|
|
|
|
* @ingroup grp_modules
|
|
|
|
*/
|
|
|
|
|
2010-04-04 16:48:19 -06:00
|
|
|
namespace DFHack
|
|
|
|
{
|
2012-01-07 08:21:07 -07:00
|
|
|
class Core;
|
|
|
|
|
2012-01-15 04:19:20 -07:00
|
|
|
// Full-screen item details view
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT bool item_details_hotkey(Core *, df::viewscreen *top);
|
2012-01-15 04:19:20 -07:00
|
|
|
// 'u'nits or 'j'obs full-screen view
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT bool unitjobs_hotkey(Core *, df::viewscreen *top);
|
|
|
|
|
2012-01-15 04:19:20 -07:00
|
|
|
// A job is selected in a workshop
|
2012-01-07 10:47:23 -07:00
|
|
|
DFHACK_EXPORT bool workshop_job_hotkey(Core *c, df::viewscreen *top);
|
2012-01-15 04:19:20 -07:00
|
|
|
// Building material selection mode
|
2012-01-07 10:47:23 -07:00
|
|
|
DFHACK_EXPORT bool build_selector_hotkey(Core *c, df::viewscreen *top);
|
2012-01-15 04:19:20 -07:00
|
|
|
// A unit is selected in the 'v' mode
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT bool view_unit_hotkey(Core *c, df::viewscreen *top);
|
2012-01-15 04:19:20 -07:00
|
|
|
// Above + the inventory page is selected.
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT bool unit_inventory_hotkey(Core *c, df::viewscreen *top);
|
|
|
|
|
2012-01-15 04:19:20 -07:00
|
|
|
// In workshop_job_hotkey, returns the job
|
2012-01-07 10:47:23 -07:00
|
|
|
DFHACK_EXPORT df::job *getSelectedWorkshopJob(Core *c, bool quiet = false);
|
2012-01-07 08:21:07 -07:00
|
|
|
|
2012-01-15 04:19:20 -07:00
|
|
|
// A job is selected in a workshop, or unitjobs
|
|
|
|
DFHACK_EXPORT bool any_job_hotkey(Core *c, df::viewscreen *top);
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT df::job *getSelectedJob(Core *c, bool quiet = false);
|
2012-01-15 04:19:20 -07:00
|
|
|
|
|
|
|
// A unit is selected via 'v', 'k', unitjobs, or
|
|
|
|
// a full-screen item view of a cage or suchlike
|
|
|
|
DFHACK_EXPORT bool any_unit_hotkey(Core *c, df::viewscreen *top);
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT df::unit *getSelectedUnit(Core *c, bool quiet = false);
|
2012-01-15 04:19:20 -07:00
|
|
|
|
|
|
|
// An item is selected via 'v'->inventory, 'k', 't', or
|
|
|
|
// a full-screen item view of a container. Note that in the
|
|
|
|
// last case, the highlighted contained item is returned, not
|
|
|
|
// the container itself.
|
|
|
|
DFHACK_EXPORT bool any_item_hotkey(Core *c, df::viewscreen *top);
|
2012-01-14 08:31:43 -07:00
|
|
|
DFHACK_EXPORT df::item *getSelectedItem(Core *c, bool quiet = false);
|
|
|
|
|
2012-01-15 04:19:20 -07:00
|
|
|
// Show a plain announcement, or a titan-style popup message
|
|
|
|
DFHACK_EXPORT void showAnnouncement(std::string message, int color = 7, bool bright = true);
|
|
|
|
DFHACK_EXPORT void showPopupAnnouncement(std::string message, int color = 7, bool bright = true);
|
|
|
|
|
2010-05-26 04:24:45 -06:00
|
|
|
class DFContextShared;
|
2011-07-09 03:33:58 -06:00
|
|
|
|
2011-03-18 04:09:26 -06:00
|
|
|
/**
|
2011-07-09 03:33:58 -06:00
|
|
|
* One tile of the screen. Possibly outdated.
|
2011-03-18 04:09:26 -06:00
|
|
|
* \ingroup grp_gui
|
|
|
|
*/
|
|
|
|
struct t_screen
|
|
|
|
{
|
|
|
|
uint8_t symbol;
|
|
|
|
uint8_t foreground;
|
|
|
|
uint8_t background;
|
|
|
|
uint8_t bright;
|
|
|
|
uint8_t gtile;
|
|
|
|
uint8_t grayscale;
|
|
|
|
};
|
2011-07-09 03:33:58 -06:00
|
|
|
|
2011-03-18 04:09:26 -06:00
|
|
|
/**
|
|
|
|
* The Gui module
|
|
|
|
* \ingroup grp_modules
|
|
|
|
* \ingroup grp_gui
|
|
|
|
*/
|
2010-06-24 23:11:26 -06:00
|
|
|
class DFHACK_EXPORT Gui: public Module
|
2010-04-04 16:48:19 -06:00
|
|
|
{
|
|
|
|
public:
|
2011-03-18 04:09:26 -06:00
|
|
|
|
2011-06-17 07:02:43 -06:00
|
|
|
Gui();
|
2010-04-04 16:48:19 -06:00
|
|
|
~Gui();
|
|
|
|
bool Start();
|
|
|
|
bool Finish();
|
2011-03-18 04:09:26 -06:00
|
|
|
/*
|
|
|
|
* Cursor and window coords
|
|
|
|
*/
|
|
|
|
bool getViewCoords (int32_t &x, int32_t &y, int32_t &z);
|
|
|
|
bool setViewCoords (const int32_t x, const int32_t y, const int32_t z);
|
|
|
|
|
|
|
|
bool getCursorCoords (int32_t &x, int32_t &y, int32_t &z);
|
|
|
|
bool setCursorCoords (const int32_t x, const int32_t y, const int32_t z);
|
2011-09-25 19:39:27 -06:00
|
|
|
|
|
|
|
bool getDesignationCoords (int32_t &x, int32_t &y, int32_t &z);
|
|
|
|
bool setDesignationCoords (const int32_t x, const int32_t y, const int32_t z);
|
|
|
|
|
|
|
|
bool getMousePos (int32_t & x, int32_t & y);
|
2011-07-09 03:33:58 -06:00
|
|
|
/*
|
|
|
|
* Gui screens
|
|
|
|
*/
|
|
|
|
/// Get the current top-level view-screen
|
2012-01-24 21:18:21 -07:00
|
|
|
df::viewscreen * GetCurrentScreen();
|
2011-07-09 03:33:58 -06:00
|
|
|
/// The DF menu state (designation menu ect)
|
2011-07-16 10:10:08 -06:00
|
|
|
uint32_t * df_menu_state;
|
2011-07-09 03:33:58 -06:00
|
|
|
|
2011-03-18 04:09:26 -06:00
|
|
|
/*
|
|
|
|
* Window size in tiles
|
|
|
|
*/
|
|
|
|
bool getWindowSize(int32_t & width, int32_t & height);
|
2012-02-22 00:30:44 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
*Menu width:
|
|
|
|
*3:3 - menu and area map closed
|
|
|
|
*2:3 - menu open single width
|
|
|
|
*1:3 - menu open double width
|
|
|
|
*1:2 - menu and area map open
|
|
|
|
*2:2 - area map open
|
|
|
|
*/
|
|
|
|
|
|
|
|
bool getMenuWidth(uint8_t & menu_width, uint8_t & area_map_width);
|
|
|
|
bool setMenuWidth(const uint8_t menu_width, const uint8_t area_map_width);
|
2011-03-18 04:09:26 -06:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Screen tiles
|
|
|
|
*/
|
|
|
|
bool getScreenTiles(int32_t width, int32_t height, t_screen screen[]);
|
|
|
|
|
2010-04-04 16:48:19 -06:00
|
|
|
private:
|
|
|
|
struct Private;
|
|
|
|
Private *d;
|
|
|
|
};
|
|
|
|
}
|
2010-05-01 18:38:18 -06:00
|
|
|
#endif
|
|
|
|
|