    // @(#)root/gui:$Name:  $:$Id: TGuiBuilder.cxx,v 1.4 2004/12/09 22:55:06 brun Exp $
    // Author: Valeriy Onuchin   12/08/04

    /*************************************************************************
     * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
     * All rights reserved.                                                  *
     *                                                                       *
     * For the licensing terms see $ROOTSYS/LICENSE.                         *
     * For the list of contributors see $ROOTSYS/README/CREDITS.             *
     *************************************************************************/

    //////////////////////////////////////////////////////////////////////////
    //
    // TGuiBuilder
    //
    //
    //  ************************************************
    //                ROOT GUI Builder principles
    //  ************************************************
    //
    //  With the GUI builder, we try to make the next step from WYSIWYG
    //  to embedded editing concept - WYSIWYE ("what you see is what you edit").
    //  The ROOT GUI Builder allows modifying real GUI objects.
    //  For example, one can edit the existing GUI application $ROOTSYS/tutorials/guitest.C.
    //  GUI components can be added to a design area from a widget palette,
    //  or can be borrowed from another application.
    //  One can drag and and drop TCanvas's menu bar into the application.
    //  GUI objects can be resized and dragged, copied and pasted.
    //  ROOT GUI Builder allows changing the layout, snap to grid, change object's
    //  layout order via the GUI Builder toolbar, or by options in the right-click
    //  context menus.
    //  A final design can be immediatly tested and used, or saved as a C++ macro.
    //  For example, it's possible to rearrange buttons in control bar,
    //  add separators etc. and continue to use a new fancy control bar in the
    //  application.
    //
    //  ************************************************
    //
    //  The following is a short description of the GUI Builder actions and key shortcuts:
    //
    //   o Press Ctrl-Double-Click to start/stop edit mode
    //   o Press Double-Click to activate quick edit action (defined in root.mimes)
    //
    //                 Selection, grabbing, dropping
    //       ************************************************
    //    It is possible to select, drag any frame and drop it to any frame
    //
    //   o Click left mouse button or Ctrl-Click to select an object to edit.
    //   o Press right mouse button to activate context menu
    //   o Mutiple selection (grabbing):
    //      - draw lasso and press Return key
    //      - press Shift key and draw lasso
    //   o Dropping:
    //      - select frame and press Ctrl-Return key
    //   o Changing layout order:
    //      - select frame and use arrow keys to change layout order
    //   o Alignment:
    //      - draw lasso and press arrow keys (or Shift-Arrow key) to align frames
    //
    //                    Key shortcuts
    //       ************************************************
    //   o Del       - delete selected frame
    //   o Shift-Del - crop action
    //   o Ctrl-X    - cut action
    //   o Ctrl-C    - copy action
    //   o Ctrl-V    - paste action
    //   o Ctrl-R    - replace action
    //   o Ctrl-L    - compact layout
    //   o Ctrl-B    - break layout
    //   o Ctrl-H    - switch horizontal-vertical layout
    //   o Ctrl-G    - switch on/off grid
    //   o Ctrl-S    - save action
    //   o Ctrl-O    - open and execute a ROOT macro file.  GUI components created
    //                 after macro execution will be emebedded to currently edited
    //                 design area.
    //   o Ctrl-N    - create new main frame
    //
    //

/* */ //

#include "TGuiBuilder.h" #include "TVirtualDragManager.h" #include "TPluginManager.h" ClassImp(TGuiBuilder) ClassImp(TGuiBldAction) TGuiBuilder *gGuiBuilder = 0; static TPluginHandler *gHandler = 0; //______________________________________________________________________________ TGuiBldAction::TGuiBldAction(const char *name, const char *title, Int_t type, TGLayoutHints *hints) : TNamed(name, title), fType(type), fHints(hints) { // ctor } //______________________________________________________________________________ TGuiBldAction::~TGuiBldAction() { // dtor } //______________________________________________________________________________ TGuiBuilder::TGuiBuilder() { // ctor // load plugin if (!gGuiBuilder) { gHandler = gROOT->GetPluginManager()->FindHandler("TGuiBuilder"); if (!gHandler || (gHandler->LoadPlugin() == -1)) return; gGuiBuilder = this; gHandler->ExecPlugin(0); } else { fAction = 0; gGuiBuilder->Show(); } } //______________________________________________________________________________ TGuiBuilder::~TGuiBuilder() { // dtor } //______________________________________________________________________________ TGuiBuilder *TGuiBuilder::Instance() { // return an instance of TGuiBuilder object return (gGuiBuilder? gGuiBuilder : new TGuiBuilder()); }