FXHandedInterface.h

Go to the documentation of this file.
00001 /********************************************************************************
00002 *                                                                               *
00003 *                              User handed interface                            *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 2004-2006 by Niall Douglas.   All Rights Reserved.              *
00007 *       NOTE THAT I DO NOT PERMIT ANY OF MY CODE TO BE PROMOTED TO THE GPL      *
00008 *********************************************************************************
00009 * This code is free software; you can redistribute it and/or modify it under    *
00010 * the terms of the GNU Library General Public License v2.1 as published by the  *
00011 * Free Software Foundation EXCEPT that clause 3 does not apply ie; you may not  *
00012 * "upgrade" this code to the GPL without my prior written permission.           *
00013 * Please consult the file "License_Addendum2.txt" accompanying this file.       *
00014 *                                                                               *
00015 * This code is distributed in the hope that it will be useful,                  *
00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                          *
00018 *********************************************************************************
00019 * $Id:                                                                          *
00020 ********************************************************************************/
00021 
00022 #if !defined(FXHANDEDINTERFACE_H) && !defined(FX_DISABLEGUI)
00023 #define FXHANDEDINTERFACE_H
00024 
00025 #include "FXDialogBox.h"
00026 #include "FXPopup.h"
00027 #include "FXPacker.h"
00028 #include "FXPrimaryButton.h"
00029 
00030 #ifdef _MSC_VER
00031 #pragma warning(push)
00032 #pragma warning(disable: 4355)  // "this" used in base member init
00033 #endif
00034 
00035 namespace FX {
00036 
00041 
00042 enum FXHandedInterfaceFlags
00043 {
00044     HANDEDINTERFACE_BOTTOMWELL      =0,             
00045     HANDEDINTERFACE_SIDEWELL        =0x02000000,    
00046     HANDEDINTERFACE_OKBUTTON        =0x04000000,    
00047     HANDEDINTERFACE_DEFOKBUTTON     =0x04000000,    
00048     HANDEDINTERFACE_CANCELBUTTON    =0x08000000,    
00049     HANDEDINTERFACE_OKCANCELBUTTONS =0x0c000000,    
00050     HANDEDINTERFACE_DEFCANCELBUTTON =0x18000000,    
00051     HANDEDINTERFACE_DEFCANCEL       =0x10000000,    
00052     HANDEDINTERFACE_USEYESNO        =0x20000000     
00053     // 0x40000000 used by FXHandedMsgBox
00054 };
00055 
00098 struct FXHandedInterfaceIPrivate;
00099 class FXAPI FXHandedInterfaceI
00100 {
00101     FXHandedInterfaceIPrivate *p;
00102     FXHandedInterfaceI(const FXHandedInterfaceI &);
00103     FXHandedInterfaceI &operator=(const FXHandedInterfaceI &);
00104 protected:
00105     FXHandedInterfaceI() : p(0) {}
00106     enum
00107     {
00108         ID_CANCEL=FXShell::ID_LAST,     
00109         ID_ACCEPT,                      
00110         ID_BUTTONWELL,
00111         ID_DOCKWELL,                    
00112         ID_UNDOCKWELL,                  
00113         ID_CHOICE,
00114         ID_LAST=ID_CHOICE+1000
00115     };
00116     long onCmdChoice(FXObject*,FXSelector,void*);
00117     long onButtonWell(FXObject*,FXSelector,void*);
00118     long onCmdDockWell(FXObject*,FXSelector,void*);
00119     long onCmdUndockWell(FXObject*,FXSelector,void*);
00120     long onConfigure(FXObject*,FXSelector,void*);
00121 
00122     FXHandedInterfaceI(FXApplyResetList *arl, FXShell *window, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING);
00123     FXHandedInterfaceI(FXApplyResetList *arl, FXShell *window, FXHandedInterfaceI &o);
00124     ~FXHandedInterfaceI();
00125 public:
00127     FXPacker *buttonWell() const throw();
00129     FXPrimaryButton *okButton() const throw();
00131     FXPrimaryButton *cancelButton() const throw();
00133     bool isButtonWellDocked() const throw();
00134 protected:
00135     FXint getDefaultWidth();
00136     FXint getDefaultHeight();
00137     void layout();
00138 };
00139 
00140 class FXHandedPopup;
00146 class FXAPI FXHandedDialog : public FXTopWindow, public FXApplyResetList, public FXHandedInterfaceI
00147 {
00148     FXDECLARE(FXHandedDialog)
00149     FXHandedDialog(const FXHandedDialog &);
00150     FXHandedDialog &operator=(const FXHandedDialog &);
00151     static FXuint int_filter(FXuint opts, FXuint newopts)
00152     {
00153         opts&=~0x000f0000;  // Remove popup bits
00154         return opts|newopts;
00155     }
00156 protected:
00157     FXHandedDialog() { }
00158 public:
00159     enum
00160     {
00161         ID_CANCEL=FXShell::ID_LAST,     
00162         ID_ACCEPT,                      
00163         ID_BUTTONWELL,
00164         ID_DOCKWELL,                    
00165         ID_UNDOCKWELL,                  
00166         ID_CHOICE,
00167         ID_LAST=ID_CHOICE+1000
00168     };
00169     long onCmdChoice(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdChoice(a,b,c); }
00170     long onButtonWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onButtonWell(a,b,c); }
00171     long onCmdDockWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdDockWell(a,b,c); }
00172     long onCmdUndockWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdUndockWell(a,b,c); }
00173     long onConfigure(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onConfigure(a,b,c); }
00174     long onCmdAccept(FXObject*,FXSelector,void*);
00175     long onCmdCancel(FXObject*,FXSelector,void*);
00176     long onKeyPress(FXObject*,FXSelector,void*);
00177     long onKeyRelease(FXObject*,FXSelector,void*);
00179     FXHandedDialog(FXApp *a, const FXString &name, FXuint opts=HANDEDINTERFACE_BOTTOMWELL|DECOR_ALL,FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD, FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING)
00180         : FXTopWindow(a, name, NULL, NULL, opts, x,y,w,h, 0,0,0,0, 0,0), FXHandedInterfaceI(this, this, pl,pr,pt,pb, hs,vs) { }
00182     FXHandedDialog(FXWindow *owner, const FXString &name, FXuint opts=HANDEDINTERFACE_BOTTOMWELL|DECOR_ALL,FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD, FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING)
00183         : FXTopWindow(owner, name, NULL, NULL, opts, x,y,w,h, 0,0,0,0, 0,0), FXHandedInterfaceI(this, this, pl,pr,pt,pb, hs,vs) { }
00184 
00186     explicit inline FXHandedDialog(FXHandedPopup &o, const FXString &name, FXuint newopts=DECOR_ALL);
00187 
00188     virtual FXint getDefaultWidth() { return FXHandedInterfaceI::getDefaultWidth(); }
00189     virtual FXint getDefaultHeight() { return FXHandedInterfaceI::getDefaultHeight(); }
00190     virtual void layout() { FXHandedInterfaceI::layout(); flags&=~FLAG_DIRTY; }
00191 };
00197 class FXAPI FXHandedPopup : public FXPopup, public FXApplyResetList, public FXHandedInterfaceI
00198 {
00199     FXDECLARE(FXHandedPopup)
00200     friend class FXHandedDialog;
00201     FXHandedPopup(const FXHandedPopup &);
00202     FXHandedPopup &operator=(const FXHandedPopup &);
00203 protected:
00204     FXHandedPopup() { }
00205 public:
00206     enum
00207     {
00208         ID_CANCEL=FXShell::ID_LAST,     
00209         ID_ACCEPT,                      
00210         ID_BUTTONWELL,
00211         ID_DOCKWELL,                    
00212         ID_UNDOCKWELL,                  
00213         ID_CHOICE,
00214         ID_LAST=ID_CHOICE+1000
00215     };
00216     long onCmdChoice(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdChoice(a,b,c); }
00217     long onButtonWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onButtonWell(a,b,c); }
00218     long onCmdDockWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdDockWell(a,b,c); }
00219     long onCmdUndockWell(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onCmdUndockWell(a,b,c); }
00220     long onConfigure(FXObject*a,FXSelector b,void*c) { return FXHandedInterfaceI::onConfigure(a,b,c); }
00221     long onCmdAccept(FXObject*,FXSelector,void*);
00222     long onCmdCancel(FXObject*,FXSelector,void*);
00223     long onKeyPress(FXObject*,FXSelector,void*);
00224     long onKeyRelease(FXObject*,FXSelector,void*);
00226     FXHandedPopup(FXWindow *owner, FXuint opts=HANDEDINTERFACE_BOTTOMWELL|FRAME_RAISED|FRAME_THICK,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD, FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING)
00227         : FXPopup(owner, opts, x,y,w,h), FXHandedInterfaceI(this, this, pl,pr,pt,pb, hs,vs) { }
00228 
00229     virtual FXint getDefaultWidth() { return FXHandedInterfaceI::getDefaultWidth(); }
00230     virtual FXint getDefaultHeight() { return FXHandedInterfaceI::getDefaultHeight(); }
00231     virtual void layout() { FXHandedInterfaceI::layout(); flags&=~FLAG_DIRTY; }
00232 };
00233 
00234 inline FXHandedDialog::FXHandedDialog(FXHandedPopup &o, const FXString &name, FXuint newopts)
00235     : FXApplyResetList(o), FXTopWindow(o.getOwner(), name, NULL, NULL, int_filter(o.options, newopts), o.xpos,o.ypos,o.width,o.height, 0,0,0,0, 0,0), FXHandedInterfaceI(this, this, o)
00236 {
00237     o.clearApplyReset();
00238 }
00239 
00240 } // namespace
00241 
00242 #ifdef _MSC_VER
00243 #pragma warning(pop)
00244 #endif
00245 
00246 #endif

(C) 2002-2009 Niall Douglas. Some parts (C) to assorted authors.
Generated on Fri Nov 20 18:31:22 2009 for TnFOX by doxygen v1.4.7