Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 8612e554b9bd767b5f0092cb48ef858c > files > 245

libiv3-devel-17-5mdv2008.1.i586.rpm

/*
 * Copyright (c) 1987, 1988, 1989, 1990, 1991 Stanford University
 * Copyright (c) 1991 Silicon Graphics, Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software and 
 * its documentation for any purpose is hereby granted without fee, provided
 * that (i) the above copyright notices and this permission notice appear in
 * all copies of the software and related documentation, and (ii) the names of
 * Stanford and Silicon Graphics may not be used in any advertising or
 * publicity relating to the software without the specific, prior written
 * permission of Stanford and Silicon Graphics.
 * 
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 *
 * IN NO EVENT SHALL STANFORD OR SILICON GRAPHICS BE LIABLE FOR
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 * OF THIS SOFTWARE.
 */

/*
 * Window - top-level object for interfacing with window managers
 */

#ifndef iv_window_h
#define iv_window_h

#include <InterViews/canvas.h>
#include <InterViews/coord.h>
#include <InterViews/geometry.h>

#include <InterViews/_enter.h>

class Bitmap;
class Canvas;
class Cursor;
class Display;
class Event;
class Glyph;
class Handler;
class ManagedWindowRep;
class String;
class Style;
class WindowRep;

class Window {
protected:
    Window(Glyph*);
public:
    virtual ~Window();

    virtual Glyph* glyph() const;

    virtual void style(Style*);
    Style* style() const;

    virtual void display(Display*);
    virtual Display* display() const;

    virtual Canvas* canvas() const;

    virtual void cursor(Cursor*);
    virtual Cursor* cursor() const;
    virtual void push_cursor();
    virtual void pop_cursor();

    virtual void place(Coord left, Coord bottom);
    virtual void pplace(IntCoord left, IntCoord bottom);
    virtual void align(float x, float y);
    virtual Coord left() const;
    virtual Coord bottom() const;

    virtual Coord width() const;
    virtual Coord height() const;

    virtual void map();
    virtual void unmap();
    virtual boolean is_mapped() const;

    virtual void bind();
    virtual void unbind();
    virtual boolean bound() const;

    virtual void raise();
    virtual void lower();
    virtual void move(Coord left, Coord bottom);
    virtual void resize();

    virtual boolean receive(const Event&);
    virtual Handler* target(const Event&) const;
    virtual void grab_pointer(Cursor* = nil) const;
    virtual void ungrab_pointer() const;

    virtual void repair();

    WindowRep* rep() const;
protected:
    Window(WindowRep*);

    virtual void configure();
    virtual void default_geometry();
    virtual void compute_geometry();
    virtual void set_attributes();
    virtual void set_props();
    virtual void do_map();
#if defined(WIN32) || MAC
protected:
    WindowRep* rep_;

    // The following is different from the SGI distribution.  This stuff is not
    // device specific and only adds geometry.h as an include dependency, so it
    // seems more reasonable to keep it here.                                  
    friend class WindowRep;                                                    
    Glyph* glyph_;                                                             
    Style* style_;                                                             
    Canvas* canvas_;                                                           
    Requisition shape_;                                                        
    Allocation allocation_;                                                    
    Handler* focus_in_;                                                        
    Handler* focus_out_;                                                       
#else
private:
    friend class WindowRep;
    WindowRep* rep_;
#endif
};

inline WindowRep* Window::rep() const { return rep_; }
#if defined(WIN32) || MAC
inline Glyph* Window::glyph() const   
    { return glyph_; }                
inline Canvas* Window::canvas() const 
    { return canvas_; }               
#endif

class ManagedWindow : public Window {
protected:
    ManagedWindow(Glyph*);
public:
    virtual ~ManagedWindow();

#if defined(WIN32) || MAC
    virtual Coord width() const;                // width of window 
    virtual Coord height() const;               // height of window
#endif

#if defined(WIN32)
    virtual boolean receive(const Event&);
#endif
    virtual void icon(ManagedWindow*);
    virtual ManagedWindow* icon() const;

    virtual void icon_bitmap(Bitmap*);
    virtual Bitmap* icon_bitmap() const;

    virtual void icon_mask(Bitmap*);
    virtual Bitmap* icon_mask() const;

    virtual void iconify();
    virtual void deiconify();

    virtual void focus_event(Handler* in, Handler* out);
    virtual void wm_delete(Handler*);

    virtual void resize();

    ManagedWindowRep* rep() const;
protected:
    virtual void compute_geometry();
    virtual void set_props();
private:
    friend class ManagedWindowRep;
    ManagedWindowRep* mrep_;
};

inline ManagedWindowRep* ManagedWindow::rep() const { return mrep_; }

class ApplicationWindow : public ManagedWindow {
public:
    ApplicationWindow(Glyph*);
    ~ApplicationWindow();
protected:
    virtual void compute_geometry();
    virtual void set_props();
};

class TopLevelWindow : public ManagedWindow {
public:
    TopLevelWindow(Glyph*);
    ~TopLevelWindow();

    virtual void group_leader(Window*);
    virtual Window* group_leader() const;
protected:
    virtual void set_props();
};

class TransientWindow : public TopLevelWindow {
public:
    TransientWindow(Glyph*);
    ~TransientWindow();

    virtual void transient_for(Window*);
    virtual Window* transient_for() const;
protected:
    virtual void configure();
    virtual void set_attributes();
};

class PopupWindow : public Window {
public:
    PopupWindow(Glyph*);
    ~PopupWindow();
protected:
    virtual void set_attributes();
#if defined(WIN32)
    virtual boolean receive(const Event&);
#endif
};

class IconWindow : public ManagedWindow {
public:
    IconWindow(Glyph*);
    ~IconWindow();
protected:
    virtual void do_map();
};

#include <InterViews/_leave.h>

#endif