Scroll.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 /* GG is a GUI for SDL and OpenGL.
00003    Copyright (C) 2003-2008 T. Zachary Laine
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public License
00007    as published by the Free Software Foundation; either version 2.1
00008    of the License, or (at your option) any later version.
00009    
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014     
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA
00019 
00020    If you do not wish to comply with the terms of the LGPL please
00021    contact the author as other terms are available for a fee.
00022     
00023    Zach Laine
00024    whatwasthataddress@gmail.com */
00025 
00028 #ifndef _GG_Scroll_h_
00029 #define _GG_Scroll_h_
00030 
00031 #include <GG/Control.h>
00032 
00033 
00034 namespace GG {
00035 
00036 class Button;
00037 
00056 class GG_API Scroll : public Control
00057 {
00058 public:
00060     enum ScrollRegion {
00061         SBR_NONE,
00062         SBR_PAGE_DN,
00063         SBR_PAGE_UP
00064     };
00065  
00067     typedef boost::signal<void (int, int, int, int)> ScrolledSignalType; 
00068     typedef boost::signal<void (int, int, int, int)> ScrolledAndStoppedSignalType; 
00069 
00070  
00072 
00073     Scroll(X x, Y y, X w, Y h, Orientation orientation, Clr color, Clr interior,
00074            Flags<WndFlag> flags = INTERACTIVE | REPEAT_BUTTON_DOWN);
00076  
00078     virtual Pt           MinUsableSize() const;
00079 
00080     std::pair<int, int>  PosnRange() const;         
00081     std::pair<int, int>  ScrollRange() const;       
00082     unsigned int         LineSize() const;          
00083     unsigned int         PageSize() const;          
00084 
00085     Clr                  InteriorColor() const;     
00086     Orientation          ScrollOrientation() const; 
00087 
00088     mutable ScrolledSignalType           ScrolledSignal;           
00089     mutable ScrolledAndStoppedSignalType ScrolledAndStoppedSignal; 
00090 
00091  
00093     virtual void   Render();
00094 
00095     virtual void   SizeMove(const Pt& ul, const Pt& lr);
00096 
00097     virtual void   Disable(bool b = true);
00098     virtual void   SetColor(Clr c);
00099 
00100     void           SetInteriorColor(Clr c); 
00101     void           SizeScroll(int min, int max, unsigned int line, unsigned int page); 
00102     void           SetMax(int max);         
00103     void           SetMin(int min);         
00104     void           SetLineSize(unsigned int line); 
00105     void           SetPageSize(unsigned int page); 
00106 
00107     void           ScrollTo(int p);  
00108     void           ScrollLineIncr(); 
00109     void           ScrollLineDecr(); 
00110     void           ScrollPageIncr(); 
00111     void           ScrollPageDecr(); 
00112 
00113     virtual void   DefineAttributes(WndEditor* editor);
00115 
00116 protected: 
00118     Scroll(); 
00119 
00120  
00122     unsigned int  TabSpace() const;          
00123     unsigned int  TabWidth() const;          
00124     ScrollRegion  RegionUnder(const Pt& pt); 
00125 
00126     Button*       TabButton() const;     
00127     Button*       IncrButton() const;    
00128     Button*       DecrButton() const;    
00129 
00130  
00132     virtual void  LButtonDown(const Pt& pt, Flags<ModKey> mod_keys);
00133     virtual void  LButtonUp(const Pt& pt, Flags<ModKey> mod_keys);
00134     virtual void  LClick(const Pt& pt, Flags<ModKey> mod_keys);
00135     virtual void  MouseHere(const Pt& pt, Flags<ModKey> mod_keys);
00136 
00137     virtual bool  EventFilter(Wnd* w, const WndEvent& event);
00139 
00140 private:
00141     void              UpdatePosn();        
00142     void              MoveTabToPosn();     
00143     void              ScrollLineIncrImpl(bool signal);
00144     void              ScrollLineDecrImpl(bool signal);
00145 
00146     Clr               m_int_color;   
00147     const Orientation m_orientation; 
00148     int               m_posn;        
00149     int               m_range_min;   
00150     int               m_range_max;   
00151     unsigned int      m_line_sz;     
00152     unsigned int      m_page_sz;     
00153     Button*           m_tab;         
00154     Button*           m_incr;        
00155     Button*           m_decr;        
00156     ScrollRegion      m_initial_depressed_region; 
00157     ScrollRegion      m_depressed_region;         
00158     bool              m_dragging_tab;
00159     bool              m_tab_dragged;
00160 
00161     friend class boost::serialization::access;
00162     template <class Archive>
00163     void serialize(Archive& ar, const unsigned int version);
00164 };
00165 
00166 // define EnumMap and stream operators for Scroll::ScrollRegion
00167 GG_ENUM_MAP_BEGIN(Scroll::ScrollRegion)
00168     GG_ENUM_MAP_INSERT(Scroll::SBR_NONE)
00169     GG_ENUM_MAP_INSERT(Scroll::SBR_PAGE_DN)
00170     GG_ENUM_MAP_INSERT(Scroll::SBR_PAGE_UP)
00171 GG_ENUM_MAP_END
00172 
00173 GG_ENUM_STREAM_IN(Scroll::ScrollRegion)
00174 GG_ENUM_STREAM_OUT(Scroll::ScrollRegion)
00175 
00179 GG_API void SignalScroll(const Scroll& scroll, bool stopped);
00180 
00181 } // namespace GG
00182 
00183 // template implementations
00184 template <class Archive>
00185 void GG::Scroll::serialize(Archive& ar, const unsigned int version)
00186 {
00187     ar  & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Control)
00188         & BOOST_SERIALIZATION_NVP(m_int_color)
00189         & boost::serialization::make_nvp("m_orientation", const_cast<Orientation&>(m_orientation))
00190         & BOOST_SERIALIZATION_NVP(m_posn)
00191         & BOOST_SERIALIZATION_NVP(m_range_min)
00192         & BOOST_SERIALIZATION_NVP(m_range_max)
00193         & BOOST_SERIALIZATION_NVP(m_line_sz)
00194         & BOOST_SERIALIZATION_NVP(m_page_sz)
00195         & BOOST_SERIALIZATION_NVP(m_tab)
00196         & BOOST_SERIALIZATION_NVP(m_incr)
00197         & BOOST_SERIALIZATION_NVP(m_decr);
00198 }
00199 
00200 #endif // _GG_Scroll_h_

Generated on Sat Mar 26 07:08:37 2011 for GG by  doxygen 1.5.9