From 4805d825f8facc6d7f94c075c698edf50bccea38 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Tue, 22 Jan 2002 22:37:13 +0000 Subject: [PATCH] Added screenshot and a few lines of explanation. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13752 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/docs/latex/fl/body.tex | 178 ++++++++++++++++++++++++++++- contrib/docs/latex/fl/screen01.bmp | Bin 0 -> 155146 bytes contrib/docs/latex/fl/screen01.gif | Bin 0 -> 10668 bytes 3 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 contrib/docs/latex/fl/screen01.bmp create mode 100644 contrib/docs/latex/fl/screen01.gif diff --git a/contrib/docs/latex/fl/body.tex b/contrib/docs/latex/fl/body.tex index 9918813326..402c7e9cf8 100644 --- a/contrib/docs/latex/fl/body.tex +++ b/contrib/docs/latex/fl/body.tex @@ -3,9 +3,183 @@ \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% \setfooter{\thepage}{}{}{}{}{\thepage}% -\section{What is FL?} +\section{What is FL?}\label{whatisfl} This manual describes FL (Frame Layout), a class library for managing sophisticated window layout, -including docking panes. +with panes that can be moved around the main window +and customized. FL handles many decoration and dragging +issues, giving applications the kind of docking facilities +that Visual C++ and Netscape Navigator possess. + +The following screenshot (from fl\_demo1) shows a frame with a number of +bars that can be dragged around. The vertical grippers with +two lines allow a bar to be dragged in that row, changing the +ordering of the bar if necessary. +The dotted grippers (as in Netscape Navigator) allow +a whole row to be moved, again changing the position of the row +if required. While moving a bar or row, immediate feedback +is given as the moving bar displaces other bars. + +Other features: the splitter bar shows a dotted thick line as +it's dragged. Single-clicking on a row handle minimizes it to +a horizontal tab which is given its own narrow row. This allows +the user to temporarily hide a row whilst allowing quick access +to it when required. + +A close button (x) hides a bar completely. You can get it back again +by right-clicking and selecting the appropriate menu item. + +A left or right pointing arrow button expands the pane in that direction. + +\center{\image{}{screen01.bmp}} + +\section{Compiling and using FL} + +FL can be found under the 'contrib' hierarchy, in the following directories: + +\begin{verbatim} + contrib/src/fl + contrib/include/wx/fl + contrib/samples/fl + contrib/docs/latex/wx + docs/html/fl + docs/htmlhelp/fl.chm + docs/pdf/fl.pdf + docs/winhelp/fl.hlp +\end{verbatim} + +To compile FL: + +\begin{itemize}\itemsep=0pt +\item Under Windows using VC++, open the flVC.dsw project +and compile. +\item Under Unix, FL should be configured when you configured +wxWindows. Make FL by changing directory to contrib/src/fl and +type 'make'. +\end{itemize} + +To use FL: + +\begin{itemize}\itemsep=0pt +\item Under Windows using VC++, link with fl[d].lib. +\item Under Unix, link with libfl[d].a. +\end{itemize} + +\section{FL concepts} + +The following is taken from fl\_demo1 and shows the main code implementing the +user interface as illustrated in \helpref{What is FL?}{whatisfl}. + +Notable points in the code: + +\begin{itemize}\itemsep=0pt +\item creating a new \helpref{wxFrameLayout}{wxframelayout} passing the top-level frame and the window that +is interpreted as the main 'client' window; +\item setting an updates manager for optimizing drag operations; +\item adding plugins for implementing various features; +\item adding bars; +\item enabling floating mode. +\end{itemize} + +\begin{verbatim} +MyFrame::MyFrame(wxFrame *frame) + : wxFrame( frame, -1, "wxWindows 2.0 wxFrameLayout Test Application", wxDefaultPosition, + wxSize( 700, 500 ), + wxCLIP_CHILDREN | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | + wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION, + "freimas" ) +{ + mpClientWnd = CreateTextCtrl( "Client window" ); + + mpLayout = new wxFrameLayout( this, mpClientWnd ); + + mpLayout->SetUpdatesManager( new cbGCUpdatesMgr() ); + + // setup plugins for testing + mpLayout->PushDefaultPlugins(); + + mpLayout->AddPlugin( CLASSINFO( cbBarHintsPlugin ) ); // fancy "X"es and bevel for bars + mpLayout->AddPlugin( CLASSINFO( cbHintAnimationPlugin ) ); + mpLayout->AddPlugin( CLASSINFO( cbRowDragPlugin ) ); + mpLayout->AddPlugin( CLASSINFO( cbAntiflickerPlugin ) ); + mpLayout->AddPlugin( CLASSINFO( cbSimpleCustomizationPlugin ) ); + + // drop in some bars + cbDimInfo sizes0( 200,45, // when docked horizontally + 200,85, // when docked vertically + 175,35, // when floated + FALSE, // the bar is not fixed-size + 4, // vertical gap (bar border) + 4 // horizontal gap (bar border) + ); + + cbDimInfo sizes1( 150,35, // when docked horizontally + 150,85, // when docked vertically + 175,35, // when floated + TRUE, // the bar is not fixed-size + 4, // vertical gap (bar border) + 4 // horizontal gap (bar border) + ); + + cbDimInfo sizes2( 175,45, // when docked horizontally + 175,37, // when docked vertically + 170,35, // when floated + TRUE, // the bar is not fixed-size + 4, // vertical gap (bar border) + 4, // horizontal gap (bar border) + new cbDynToolBarDimHandler() + ); + + mpLayout->AddBar( CreateTextCtrl("Hello"), // bar window + sizes0, FL_ALIGN_TOP, // alignment ( 0-top,1-bottom, etc) + 0, // insert into 0th row (vert. position) + 0, // offset from the start of row (in pixels) + "InfoViewer1", // name to refere in customization pop-ups + TRUE + ); + + mpLayout->AddBar( CreateTextCtrl("Bye"), // bar window + sizes0, FL_ALIGN_TOP, // alignment ( 0-top,1-bottom, etc) + 1, // insert into 0th row (vert. position) + 0, // offset from the start of row (in pixels) + "InfoViewer2", // name to refere in customization pop-ups + TRUE + ); + + mpLayout->AddBar( CreateTextCtrl("Fixed0"), // bar window + sizes1, FL_ALIGN_TOP, // alignment ( 0-top,1-bottom, etc) + 0, // insert into 0th row (vert. position) + 0, // offset from the start of row (in pixels) + "ToolBar1", // name to refer in customization pop-ups + TRUE + ); + + wxDynamicToolBar* pToolBar = new wxDynamicToolBar(); + + pToolBar->Create( this, -1 ); + + // 1001-1006 ids of command events fired by added tool-buttons + + pToolBar->AddTool( 1001, BMP_DIR "new.bmp" ); + pToolBar->AddTool( 1002, BMP_DIR "open.bmp" ); + pToolBar->AddTool( 1003, BMP_DIR "save.bmp" ); + + pToolBar->AddTool( 1004, BMP_DIR "cut.bmp" ); + pToolBar->AddTool( 1005, BMP_DIR "copy.bmp" ); + pToolBar->AddTool( 1006, BMP_DIR "paste.bmp" ); + + mpLayout->AddBar( pToolBar, // bar window (can be NULL) + sizes2, FL_ALIGN_TOP, // alignment ( 0-top,1-bottom, etc) + 0, // insert into 0th row (vert. position) + 0, // offset from the start of row (in pixels) + "ToolBar2", // name to refere in customization pop-ups + FALSE + ); + + mpLayout->EnableFloating( TRUE ); // off, thinking about wxGtk... +} +\end{verbatim} + + diff --git a/contrib/docs/latex/fl/screen01.bmp b/contrib/docs/latex/fl/screen01.bmp new file mode 100644 index 0000000000000000000000000000000000000000..16bcd0dee81bac23de6a156315421e170a3de459 GIT binary patch literal 155146 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 literal 0 HcmV?d00001 diff --git a/contrib/docs/latex/fl/screen01.gif b/contrib/docs/latex/fl/screen01.gif new file mode 100644 index 0000000000000000000000000000000000000000..372bc6ffb7faa847e156774a407d037b7f9d65e5 GIT binary patch literal 10668 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 ae!_N*%63hLcFm4