windowProperties.h

00001 // Filename: windowProperties.h
00002 // Created by:  drose (13Aug02)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #ifndef WINDOWPROPERTIES_H
00016 #define WINDOWPROPERTIES_H
00017 
00018 #include "pandabase.h"
00019 #include "filename.h"
00020 #include "pnotify.h"
00021 #include "windowHandle.h"
00022    
00023 ////////////////////////////////////////////////////////////////////
00024 //       Class : WindowProperties
00025 // Description : A container for the various kinds of properties we
00026 //               might ask to have on a graphics window before we open
00027 //               it.  This also serves to hold the current properties
00028 //               for a window after it has been opened.
00029 ////////////////////////////////////////////////////////////////////
00030 class EXPCL_PANDA_DISPLAY WindowProperties {
00031 PUBLISHED:
00032   enum ZOrder {
00033     Z_bottom,
00034     Z_normal,
00035     Z_top,
00036   };
00037   
00038   enum MouseMode {
00039     M_absolute,
00040     M_relative,
00041   };
00042 
00043   WindowProperties();
00044   INLINE WindowProperties(const WindowProperties &copy);
00045   void operator = (const WindowProperties &copy);
00046   INLINE ~WindowProperties();
00047 
00048   static WindowProperties get_config_properties();
00049   static WindowProperties get_default();
00050   static void set_default(const WindowProperties &default_properties);
00051   static void clear_default();
00052 
00053   static WindowProperties size(int x_size, int y_size);
00054 
00055   bool operator == (const WindowProperties &other) const;
00056   INLINE bool operator != (const WindowProperties &other) const;
00057 
00058   void clear();
00059   INLINE bool is_any_specified() const;
00060   
00061   INLINE void set_origin(int x_origin, int y_origin);
00062   INLINE int get_x_origin() const;
00063   INLINE int get_y_origin() const;
00064   INLINE bool has_origin() const;
00065   INLINE void clear_origin();
00066 
00067   INLINE void set_size(int x_size, int y_size);
00068   INLINE int get_x_size() const;
00069   INLINE int get_y_size() const;
00070   INLINE bool has_size() const;
00071   INLINE void clear_size();
00072 
00073   INLINE bool has_mouse_mode() const;
00074   INLINE void set_mouse_mode(MouseMode mode);
00075   INLINE MouseMode get_mouse_mode() const;
00076   INLINE void clear_mouse_mode();  
00077 
00078   INLINE void set_title(const string &title);
00079   INLINE const string &get_title() const;
00080   INLINE bool has_title() const;
00081   INLINE void clear_title();
00082 
00083   INLINE void set_undecorated(bool undecorated);
00084   INLINE bool get_undecorated() const;
00085   INLINE bool has_undecorated() const;
00086   INLINE void clear_undecorated();
00087 
00088   INLINE void set_fixed_size(bool fixed_size);
00089   INLINE bool get_fixed_size() const;
00090   INLINE bool has_fixed_size() const;
00091   INLINE void clear_fixed_size();
00092 
00093   INLINE void set_fullscreen(bool fullscreen);
00094   INLINE bool get_fullscreen() const;
00095   INLINE bool has_fullscreen() const;
00096   INLINE void clear_fullscreen();
00097 
00098   INLINE void set_foreground(bool foreground);
00099   INLINE bool get_foreground() const;
00100   INLINE bool has_foreground() const;
00101   INLINE void clear_foreground();
00102 
00103   INLINE void set_minimized(bool minimized);
00104   INLINE bool get_minimized() const;
00105   INLINE bool has_minimized() const;
00106   INLINE void clear_minimized();
00107 
00108   INLINE void set_raw_mice(bool raw_mice);
00109   INLINE bool get_raw_mice() const;
00110   INLINE bool has_raw_mice() const;
00111   INLINE void clear_raw_mice();
00112 
00113   INLINE void set_open(bool open);
00114   INLINE bool get_open() const;
00115   INLINE bool has_open() const;
00116   INLINE void clear_open();
00117 
00118   INLINE void set_cursor_hidden(bool cursor_hidden);
00119   INLINE bool get_cursor_hidden() const;
00120   INLINE bool has_cursor_hidden() const;
00121   INLINE void clear_cursor_hidden();
00122 
00123   INLINE void set_icon_filename(const Filename &icon_filename);
00124   INLINE const Filename &get_icon_filename() const;
00125   INLINE bool has_icon_filename() const;
00126   INLINE void clear_icon_filename();
00127 
00128   INLINE void set_cursor_filename(const Filename &cursor_filename);
00129   INLINE const Filename &get_cursor_filename() const;
00130   INLINE bool has_cursor_filename() const;
00131   INLINE void clear_cursor_filename();
00132 
00133   INLINE void set_z_order(ZOrder z_order);
00134   INLINE ZOrder get_z_order() const;
00135   INLINE bool has_z_order() const;
00136   INLINE void clear_z_order();
00137 
00138   void set_parent_window(size_t parent);
00139   INLINE void set_parent_window(WindowHandle *parent_window = NULL);
00140   INLINE WindowHandle *get_parent_window() const;
00141   INLINE bool has_parent_window() const;
00142   INLINE void clear_parent_window();
00143 
00144   void add_properties(const WindowProperties &other);
00145 
00146   void output(ostream &out) const;
00147 
00148 private:
00149   // This bitmask indicates which of the parameters in the properties
00150   // structure have been filled in by the user, and which remain
00151   // unspecified.
00152   enum Specified {
00153     S_origin               = 0x00001,
00154     S_size                 = 0x00002,
00155     S_title                = 0x00004,
00156     S_undecorated          = 0x00008,
00157     S_fullscreen           = 0x00010,
00158     S_foreground           = 0x00020,
00159     S_minimized            = 0x00040,
00160     S_open                 = 0x00080,
00161     S_cursor_hidden        = 0x00100,
00162     S_fixed_size           = 0x00200,
00163     S_z_order              = 0x00400,
00164     S_icon_filename        = 0x00800,
00165     S_cursor_filename      = 0x01000,
00166     S_mouse_mode           = 0x02000,
00167     S_parent_window        = 0x04000,
00168     S_raw_mice             = 0x08000,
00169   };
00170 
00171   // This bitmask represents the true/false settings for various
00172   // boolean flags (assuming the corresponding S_* bit has been set,
00173   // above).
00174   enum Flags {
00175     F_undecorated    = S_undecorated,
00176     F_fullscreen     = S_fullscreen,
00177     F_foreground     = S_foreground,
00178     F_minimized      = S_minimized,
00179     F_open           = S_open,
00180     F_cursor_hidden  = S_cursor_hidden,
00181     F_fixed_size     = S_fixed_size,
00182     F_raw_mice       = S_raw_mice,
00183   };
00184 
00185   int _specified;
00186   int _x_origin;
00187   int _y_origin;
00188   int _x_size;
00189   int _y_size;
00190   MouseMode _mouse_mode;
00191   string _title;
00192   Filename _cursor_filename;
00193   Filename _icon_filename;
00194   ZOrder _z_order;
00195   unsigned int _flags;
00196   PT(WindowHandle) _parent_window;
00197 
00198   static WindowProperties *_default_properties;
00199 };
00200 
00201 EXPCL_PANDA_DISPLAY ostream &
00202 operator << (ostream &out, WindowProperties::ZOrder z_order);
00203 EXPCL_PANDA_DISPLAY istream &
00204 operator >> (istream &in, WindowProperties::ZOrder &z_order);
00205 
00206 EXPCL_PANDA_DISPLAY ostream &
00207 operator << (ostream &out, WindowProperties::MouseMode mode);
00208 EXPCL_PANDA_DISPLAY istream &
00209 operator >> (istream &in, WindowProperties::MouseMode &mode);
00210 
00211 
00212 INLINE ostream &operator << (ostream &out, const WindowProperties &properties);
00213 
00214 #include "windowProperties.I"
00215 
00216 #endif