Codebase list ruby-fxruby / master swig-interfaces / FXTopWindow.i
master

Tree @master (Download .tar.gz)

FXTopWindow.i @masterraw · history · blame

/***********************************************************************
 * FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
 * Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * For further information please contact the author by e-mail
 * at "[email protected]".
 ***********************************************************************/

/// Title and border decorations
enum {
  DECOR_NONE        = 0,                                  /// Borderless window
  DECOR_TITLE       = 0x00020000,                         /// Window title
  DECOR_MINIMIZE    = 0x00040000,                         /// Minimize button
  DECOR_MAXIMIZE    = 0x00080000,                         /// Maximize button
  DECOR_CLOSE       = 0x00100000,                         /// Close button
  DECOR_BORDER      = 0x00200000,                         /// Border
  DECOR_SHRINKABLE  = 0x00400000,                         /// Window can become smaller
  DECOR_STRETCHABLE = 0x00800000,                         /// Window can become larger
  DECOR_RESIZE      = DECOR_SHRINKABLE|DECOR_STRETCHABLE, /// Resize handles
  DECOR_MENU        = 0x01000000,                         /// Window menu
  DECOR_ALL         = (DECOR_TITLE|DECOR_MINIMIZE|DECOR_MAXIMIZE|DECOR_CLOSE|DECOR_BORDER|DECOR_SHRINKABLE|DECOR_STRETCHABLE|DECOR_MENU)
  };


/// Initial window placement
enum {
  PLACEMENT_DEFAULT,                  /// Place it at the default size and location
  PLACEMENT_VISIBLE,                  /// Place window to be fully visible
  PLACEMENT_CURSOR,                   /// Place it under the cursor position
  PLACEMENT_OWNER,                    /// Place it centered on its owner
  PLACEMENT_SCREEN,                   /// Place it centered on the screen
  PLACEMENT_MAXIMIZED                 /// Place it maximized to the screen size
  };


class FXToolBar;


/**
* Abstract base class for all top-level windows.
* TopWindows are usually managed by a Window Manager under X11 and
* therefore borders and window-menus and other decorations like resize-
* handles are subject to the Window Manager's interpretation of the
* decoration hints.
* When a TopWindow is closed, it sends a SEL_CLOSE message to its
* target.  The target should return 0 in response to this message if
* there is no objection to proceed with the closing of the window, and
* return 1 otherwise.  After the SEL_CLOSE message has been sent and
* no objection was raised, the window will delete itself.
* When the session is closed, the window will send a SEL_SESSION_NOTIFY
* message to its target, allowing the application to write any unsaved
* data to the disk.  If the target returns 0, then the system will proceed
* to close the session.  Subsequently a SEL_SESSION_CLOSED will be received
* which causes the window to be closed with prejudice by calling the
* function close(FALSE).
* When receiving a SEL_UPDATE, the target can update the title string
* of the window, so that the title of the window reflects the name
* of the document, for example.
* For convenience, TopWindow provides the same layout behavior as
* the Packer widget, as well as docking and undocking of toolbars.
* TopWindows can be owned by other windows, or be free-floating.
* Owned TopWindows will usually remain stacked on top of the owner
* windows. The lifetime of an owned window should not exceed that of
* the owner.
*/
class FXTopWindow : public FXShell {
public:
  long onFocusUp(FXObject*,FXSelector,void* PTR_EVENT);
  long onFocusDown(FXObject*,FXSelector,void* PTR_EVENT);
  long onFocusLeft(FXObject*,FXSelector,void* PTR_EVENT);
  long onFocusRight(FXObject*,FXSelector,void* PTR_EVENT);
  long onSessionNotify(FXObject*,FXSelector,void* PTR_EVENT);
  long onSessionClosed(FXObject*,FXSelector,void* PTR_EVENT);
  long onCmdMaximize(FXObject*,FXSelector,void*); // FIXME
  long onCmdMinimize(FXObject*,FXSelector,void*); // FIXME
  long onCmdRestore(FXObject*,FXSelector,void*); // FIXME
  long onCmdClose(FXObject*,FXSelector,void*); // FIXME
  long onCmdSetStringValue(FXObject*,FXSelector,void*); // FIXME
  long onCmdGetStringValue(FXObject*,FXSelector,void*); // FIXME
  long onCmdSetIconValue(FXObject*,FXSelector,void*); // FIXME
  long onCmdGetIconValue(FXObject*,FXSelector,void*); // FIXME
public:
  enum {
    ID_MAXIMIZE=FXShell::ID_LAST,       /// Maximize the window
    ID_MINIMIZE,                        /// Minimize the window
    ID_RESTORE,                         /// Restore the window
    ID_CLOSE,                           /// Close the window
    ID_QUERY_DOCK,                      /// Toolbar asks to dock
    ID_LAST
    };
public:
  %extend {
    // Construct free-floating top-level window
    FXTopWindow(FXApp* a,const FXString& name,FXIcon *ic,FXIcon *mi,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs){
      return new FXRbTopWindow(a,name,ic,mi,opts,x,y,w,h,pl,pr,pt,pb,hs,vs);
      }

    // Construct owned top-level window
    FXTopWindow(FXWindow* owner,const FXString& name,FXIcon *ic,FXIcon *mi,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs){
      return new FXRbTopWindow(owner,name,ic,mi,opts,x,y,w,h,pl,pr,pt,pb,hs,vs);
      }
    }


  %extend {
    /// Obtain border sizes added to our window by the window manager
    VALUE getWMBorders(){
      FXint left,right,top,bottom;
      if(self->getWMBorders(left,right,top,bottom)){
        return rb_ary_new3(4,INT2NUM(left),INT2NUM(right),INT2NUM(top),INT2NUM(bottom));
        }
      else{
        return Qnil; // FIXME
	}
      }
  }

  /// Position the window based on placement
  void place(FXuint placement);

  /// Return TRUE if maximized
  FXbool isMaximized() const;

  /// Return TRUE if minimized
  FXbool isMinimized() const;

  /// Change window title
  void setTitle(const FXString& name);

  /// Return window title
  FXString getTitle() const;

  /// Change top padding
  void setPadTop(FXint pt);

  /// Get top interior padding
  FXint getPadTop() const;

  /// Change bottom padding
  void setPadBottom(FXint pb);

  /// Get bottom interior padding
  FXint getPadBottom() const;

  /// Change left padding
  void setPadLeft(FXint pl);

  /// Get left interior padding
  FXint getPadLeft() const;

  /// Change right padding
  void setPadRight(FXint pr);

  /// Get right interior padding
  FXint getPadRight() const;

  /// Return horizontal spacing between children
  FXint getHSpacing() const;

  /// Return vertical spacing between children
  FXint getVSpacing() const;

  /// Change horizontal spacing between children
  void setHSpacing(FXint hs);

  /// Change vertical spacing between children
  void setVSpacing(FXint vs);

  /// Change packing hints for children
  void setPackingHints(FXuint ph);

  /// Return packing hints for children
  FXuint getPackingHints() const;

  /// Change title and border decorations
  void setDecorations(FXuint decorations);

  /// Return current title and border decorations
  FXuint getDecorations() const;

  /// Return window icon
  FXIcon* getIcon() const;

  /// Change window icon
  void setIcon(FXIcon* ic);

  /// Return window mini (title) icon
  FXIcon* getMiniIcon() const;

  /// Change window mini (title) icon
  void setMiniIcon(FXIcon *ic);

  /// Destructor
  virtual ~FXTopWindow();
  };


DECLARE_FXOBJECT_VIRTUALS(FXTopWindow)
DECLARE_FXID_VIRTUALS(FXTopWindow)
DECLARE_FXDRAWABLE_VIRTUALS(FXTopWindow)
DECLARE_FXWINDOW_VIRTUALS(FXTopWindow)
DECLARE_FXTOPWINDOW_VIRTUALS(FXTopWindow)

%{
static swig_type_info *FXTopWindow_dynamic_cast(void **ptr) {
    FXTopWindow **ppTopWindow = reinterpret_cast<FXTopWindow **>(ptr);
    FXDialogBox *pDialogBox=dynamic_cast<FXDialogBox*>(*ppTopWindow);
    if(pDialogBox){
      *ptr=reinterpret_cast<void*>(pDialogBox);
      return SWIG_TypeQuery("FXDialogBox *");
      }
    FXMainWindow *pMainWindow=dynamic_cast<FXMainWindow*>(*ppTopWindow);
    if(pMainWindow){
      *ptr=reinterpret_cast<void*>(pMainWindow);
      return SWIG_TypeQuery("FXMainWindow *");
      }
    FXSplashWindow *pSplashWindow=dynamic_cast<FXSplashWindow*>(*ppTopWindow);
    if(pSplashWindow){
      *ptr=reinterpret_cast<void*>(pSplashWindow);
      return SWIG_TypeQuery("FXSplashWindow *");
      }
    FXToolBarShell *pToolBarShell=dynamic_cast<FXToolBarShell*>(*ppTopWindow);
    if(pToolBarShell){
      *ptr=reinterpret_cast<void*>(pToolBarShell);
      return SWIG_TypeQuery("FXToolBarShell *");
      }
    return 0;
}
%}

DYNAMIC_CAST(SWIGTYPE_p_FXTopWindow, FXTopWindow_dynamic_cast);