21#include "RConfigure.h"
166 "PostScript",
"*.ps",
167 "Encapsulated PostScript",
"*.eps",
171 "ROOT macros",
"*.C",
172 "ROOT files",
"*.root",
188 {
"",
"",
kFALSE, -1, 0 },
191 {
"",
"",
kFALSE, -1, 0 },
267 fEditDisabled = kEditDisable;
280 gVirtualX->SetInputFocus(GetMainFrame()->GetId());
285 if (newpos < 0) newpos = 0;
347 static Int_t img = 0;
446 if (
gROOT->GetEditHistograms())
539 else if (
gVirtualX->InheritsFrom(
"TGCocoa"))
546 Error(
"CreateCanvas",
"GL manager plugin failed");
559 Error(
"CreateCanvas",
"GL context creation failed.");
561 Error(
"CreateCanvas",
"GL window creation failed\n");
581 "EventInfo(Int_t, Int_t, Int_t, TObject*)");
584 int parts[] = { 33, 10, 10, 47 };
701 this,
"EventInfo(Int_t, Int_t, Int_t, TObject*)");
745 0, 0,
x,
y, childdum);
778 gROOT->SetEditorMode();
781 gROOT->SetEditorMode(
"Arc");
784 gROOT->SetEditorMode(
"Line");
787 gROOT->SetEditorMode(
"Arrow");
790 gROOT->SetEditorMode(
"Diamond");
793 gROOT->SetEditorMode(
"Ellipse");
796 gROOT->SetEditorMode(
"Pad");
799 gROOT->SetEditorMode(
"Pave");
802 gROOT->SetEditorMode(
"PaveLabel");
805 gROOT->SetEditorMode(
"PaveText");
808 gROOT->SetEditorMode(
"PavesText");
811 gROOT->SetEditorMode(
"PolyLine");
814 gROOT->SetEditorMode(
"CurlyLine");
817 gROOT->SetEditorMode(
"CurlyArc");
820 gROOT->SetEditorMode(
"Text");
823 gROOT->SetEditorMode(
"Marker");
826 gROOT->SetEditorMode(
"CutG");
831 gROOT->MakeDefCanvas();
849 static Int_t typeidx = 0;
896 appendedType =
kTRUE;
900 Warning(
"ProcessMessage",
"file %s cannot be saved with this extension", fi.
fFilename);
954 gROOT->ProcessLine(
"TStyleManager::Terminate()");
962 gROOT->ProcessLine(
"TStyleManager::Show()");
1018 if (padsav) padsav->
cd();
1030 if (padsav) padsav->
cd();
1037 gPad->GetViewer3D(
"x3d");
1040 gPad->GetViewer3D(
"ogl");
1093 gROOT->SetInterrupt();
1102 delete gPad->FindObject(
"stats");
1114 delete gPad->FindObject(
"title");
1135 if (
gROOT->GetEditHistograms()) {
1157 gROOT->ProcessLine(
"new TGRecorder()");
1179 if (handler && handler->
LoadPlugin() != -1) {
1181 Error(
"FitPanel",
"Unable to crate the FitPanel");
1184 Error(
"FitPanel",
"Unable to find the FitPanel plug-in");
1200 sprintf(str,
"About ROOT %s...",
gROOT->GetVersion());
1219 hd =
new TRootHelpDialog(
this,
"Help on Graphics Editor...", 600, 400);
1346 char *printer, *printCmd;
1347 static TString sprinter, sprintCmd;
1352 printer =
StrDup(sprinter);
1353 if (sprintCmd ==
"")
1360 printCmd =
StrDup(sprintCmd);
1363 &printer, &printCmd, &ret);
1366 sprintCmd = printCmd;
1381 cmd +=
" "; cmd += sprinter; cmd +=
" ";
1387 cmd +=
" "; cmd += fn; cmd +=
" ";
1416 const char *title = selected->
GetTitle();
1419 if (title && strlen(title))
1453 if (dh - ch >= sh)
h =
h + sh;
1458 if (dh - ch < sh)
h = ch;
1481 if (
main &&
main->InheritsFrom(
"TRootBrowser")) {
1485 this,
"Activated(Int_t)");
1541 if (savedPad)
gPad = savedPad;
1561 if (show == 0)
gEnv->
SetValue(
"Canvas.ShowEditor",
"false");
1574 Int_t spacing = 6, i;
1722 Int_t button =
event->fCode;
1769 Int_t button =
event->fCode;
1795 static Int_t dh = 0;
1811 static UInt_t previous_keysym = 0;
1817 gVirtualX->LookupString(event, str,
sizeof(str), keysym);
1819 if (str[0] ==
kESC){
1827 gROOT->SetInterrupt();
1830 if (keysym > 0x1011 && keysym < 0x1016) {
1833 Int_t mx, my, tx, ty;
1834 wid =
gVirtualX->GetDefaultRootWindow();
1835 gVirtualX->QueryPointer(wid, dum1, dum2, mx, my, mx, my, mask);
1838 mx, my, tx, ty, dum1);
1842 if ((previous_keysym == keysym) && (previous_event ==
kGKeyPress)) {
1861 previous_keysym = keysym;
1869 gVirtualX->LookupString(event, str,
sizeof(str), keysym);
1871 if (keysym > 0x1011 && keysym < 0x1016) {
1874 Int_t mx, my, tx, ty;
1875 wid =
gVirtualX->GetDefaultRootWindow();
1876 gVirtualX->QueryPointer(wid, dum1, dum2, mx, my, mx, my, mask);
1895 mx, my, tx, ty, dum1);
1897 previous_keysym = keysym;
1901 previous_event =
event->fType;
1932 if (event->
fCount == 0) {
1967 if (!obj)
return kTRUE;
1971 if (!
object)
return kTRUE;
1972 if (
object->InheritsFrom(
"TGraph"))
1974 else if (
object->InheritsFrom(
"TImage"))
1976 else if (
object->IsA()->GetMethodAllAny(
"Draw"))
1981 else if (obj->IsA()->GetMethodAllAny(
"Draw"))
1989 if (sfname.
Length() > 7) {
2023 gROOT->SetSelectedPad(pad);
2038 for (
int i = 0; typelist[i] !=
kNone; ++i) {
2039 if (typelist[i] == rootObj)
2041 if (typelist[i] == uriObj)
2080void TRootContainer::SavePrimitive(std::ostream &out,
Option_t * )
2082 out << std::endl <<
" // canvas container" << std::endl;
2083 out <<
" Int_t canvasID = gVirtualX->InitWindow((ULong_t)"
2084 << GetParent()->GetParent()->GetName() <<
"->GetId());" << std::endl;
2085 out <<
" Window_t winC = gVirtualX->GetWindowID(canvasID);" << std::endl;
2086 out <<
" TGCompositeFrame *";
2087 out << GetName() <<
" = new TGCompositeFrame(gClient,winC"
2088 <<
"," << GetParent()->GetName() <<
");" << std::endl;
const Mask_t kButtonPressMask
const Mask_t kExposureMask
const Mask_t kKeyReleaseMask
const Mask_t kAnyModifier
const Mask_t kKeyPressMask
const Mask_t kPointerMotionMask
const Mask_t kKeyShiftMask
const Mask_t kLeaveWindowMask
const Mask_t kStructureNotifyMask
const Mask_t kButtonReleaseMask
R__EXTERN const char gHelpObjects[]
R__EXTERN const char gHelpPullDownMenus[]
R__EXTERN const char gHelpAbout[]
R__EXTERN const char gHelpGraphicsEditor[]
R__EXTERN const char gHelpCanvas[]
R__EXTERN const char gHelpBrowser[]
R__EXTERN const char gHelpPostscript[]
R__EXTERN TApplication * gApplication
include TDocParser_001 C image html pict1_TDocParser_001 png width
R__EXTERN Int_t gErrorIgnoreLevel
R__EXTERN void * gTQSender
static const char * gSaveAsTypes[]
static ToolBarData_t gToolBarData1[]
static ToolBarData_t gToolBarData[]
static const char * gOpenTypes[]
char * Form(const char *fmt,...)
char * StrDup(const char *str)
Duplicate the string str.
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
R__EXTERN Int_t(* gThreadXAR)(const char *xact, Int_t nb, void **ar, Int_t *iret)
Bool_t ReturnFromRun() const
virtual void Terminate(Int_t status=0)
Terminate the application by call TSystem::Exit() unless application has been told to return from Run...
Using a TBrowser one can browse all ROOT objects.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
void * ReadObjectAny(const TClass *cast) override
Read object from I/O buffer.
void SetReadMode()
Set buffer in read mode.
ABC describing GUI independent main window (with menubar, scrollbars and a drawing area).
UInt_t GetWindowHeight() const
virtual void ToggleAutoExec()
Toggle pad auto execution of list of TExecs.
Bool_t OpaqueResizing() const
Is pad resizing in opaque mode ?
virtual void ToggleToolTips()
Toggle tooltip display.
virtual void ToggleEventStatus()
Toggle event statusbar.
virtual void SetName(const char *name="")
Set canvas name. In case name is an empty string, a default name is set.
void Clear(Option_t *option="")
Remove all primitives from the canvas.
void SetSupportGL(Bool_t support)
virtual void Paint(Option_t *option="")
Paint canvas.
virtual void Resize(Option_t *option="")
Recompute canvas parameters following a X11 Resize.
void SaveSource(const char *filename="", Option_t *option="")
Save primitives in this canvas as a C++ macro file.
void SetCanvasImp(TCanvasImp *i)
virtual void HandleInput(EEventType button, Int_t x, Int_t y)
Handle Input Events.
Bool_t GetShowEditor() const
Bool_t OpaqueMoving() const
Is pad moving in opaque mode ?
virtual void Update()
Update canvas pad buffers.
Bool_t GetAutoExec() const
virtual void ToggleEditor()
Toggle editor.
Bool_t GetShowToolTips() const
void Flush()
Flush canvas buffers.
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
void MoveOpaque(Int_t set=1)
Set option to move objects/pads in a canvas.
virtual TPad * Pick(Int_t px, Int_t py, TObjLink *&pickobj)
Search for an object at pixel position px,py.
void ResizeOpaque(Int_t set=1)
Set option to resize objects/pads in a canvas.
virtual void ToggleToolBar()
Toggle toolbar.
Draw inheritance tree and their relations for a list of classes.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Draw the ROOT Color Wheel.
virtual void Draw(Option_t *option="")
Paint the color wheel.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
virtual void SetContainer(TGFrame *f)
virtual void SetVsbPosition(Int_t newPos)
Set position of vertical scrollbar.
virtual Int_t GetVsbPosition() const
Get position of vertical scrollbar.
TGViewPort * GetViewPort() const
const TGWindow * GetDefaultRoot() const
Returns the root (i.e.
const TGWindow * GetRoot() const
Returns current root (i.e.
UInt_t GetDisplayHeight() const
Get display height.
virtual Bool_t HandleCrossing(Event_t *)
virtual Bool_t HandleButton(Event_t *)
TGCompositeFrame(const TGCompositeFrame &)
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
virtual void SetEditable(Bool_t on=kTRUE)
Switch ON/OFF edit mode.
virtual void Layout()
Layout the elements of the composite frame.
virtual void SetCleanup(Int_t mode=kLocalCleanup)
Turn on automatic cleanup of child frames in dtor.
virtual TGDimension GetDefaultSize() const
std::cout << fWidth << "x" << fHeight << std::endl;
virtual Int_t MustCleanup() const
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
virtual void ShowFrame(TGFrame *f)
Show sub frame.
virtual void SetEditDisabled(UInt_t on=1)
Set edit disable flag for this frame and subframes.
virtual Bool_t HandleDoubleClick(Event_t *)
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a composite frame widget as a C++ statement(s) on output stream out.
virtual Bool_t HandleMotion(Event_t *)
virtual void HideFrame(TGFrame *f)
Hide sub frame.
virtual Bool_t HandleKey(Event_t *)
void DockContainer(Int_t del=kTRUE)
Dock container back to TGDockableFrame.
virtual void AddFrame(TGFrame *f, TGLayoutHints *hints)
Add frame to dockable frame container. Frame and hints are NOT adopted.
void SetWindowName(const char *name)
Set window name so it appear as title of the undock window.
void EnableHide(Bool_t onoff)
Enable hiding.
Bool_t IsUndocked() const
void SetIniDir(const char *inidir)
Set directory name.
virtual Bool_t HandleConfigureNotify(Event_t *event)
This event is generated when the frame is resized.
virtual void DeleteWindow()
Delete window.
virtual void Move(Int_t x, Int_t y)
Move frame.
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
virtual void MoveResize(Int_t x, Int_t y, UInt_t w=0, UInt_t h=0)
Move and/or resize the frame.
void SetDNDTarget(Bool_t onoff)
virtual void SendCloseMessage()
Send close message to self.
void SetClassHints(const char *className, const char *resourceName)
Set the windows class and resource name.
void SetIconName(const char *name)
Set window icon name. This is typically done via the window manager.
void SetWMPosition(Int_t x, Int_t y)
Give the window manager a window position hint.
const char * GetWindowName() const
void SetWindowName(const char *name=0)
Set window name. This is typically done via the window manager.
const TGPicture * SetIconPixmap(const char *iconName)
Set window icon pixmap by name.
virtual void SetText(TGString *text, Int_t partidx=0)
Set text in partition partidx in status bar.
virtual void SetParts(Int_t npart)
Divide the status bar in npart equal sized parts.
TGTabElement * GetTabTab(Int_t tabIndex) const
Return the tab element of tab with index tabIndex.
virtual Bool_t SetTab(Int_t tabIndex, Bool_t emit=kTRUE)
Brings the composite frame with the index tabIndex to the front and generate the following event if t...
TGCompositeFrame * GetTabContainer(Int_t tabIndex) const
Return container of tab with index tabIndex.
virtual const TGWindow * GetMainFrame() const
Returns top level main frame.
virtual Bool_t HandleExpose(Event_t *event)
virtual Bool_t IsMapped()
Returns kTRUE if window is mapped on screen, kFALSE otherwise.
static TGuiBuilder * Instance()
return an instance of TGuiBuilder object
An abstract interface to image processing library.
virtual void SetEditable(Bool_t=kTRUE)
static TImage * Open(const char *file, EImageFileTypes type=kUnknown)
Open a specified image file.
static TImage * Create()
Create an image.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
static void DisplayMarkerTypes()
Display the table of markers with their numbers.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Returns string containing info about the object at position (px,py).
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * GetTitle() const
Returns title of object.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
The most important graphics class in the ROOT system.
Double_t GetAspectRatio() const
void Modified(Bool_t flag=1)
virtual void Update()
Update pad.
virtual void SetGLDevice(Int_t dev)
virtual void Print(const char *filename="") const
Save Pad contents in a file in one of various formats.
virtual void SaveAs(const char *filename="", Option_t *option="") const
Save Pad contents in a file in one of various formats.
Bool_t HasFixedAspectRatio() const
TVirtualPad * cd(Int_t subpadnumber=0)
Set Current pad.
Long_t ExecPlugin(int nargs, const T &... params)
Int_t LoadPlugin()
Load the plugin library for this handler.
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Bool_t Disconnect(const char *signal=0, void *receiver=0, const char *slot=0)
Disconnects signal of this object from slot of receiver.
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
TGTab * GetTabLeft() const
TGFrame * GetActFrame() const
virtual void StopEmbedding(const char *name=0)
virtual void StartEmbedding(Int_t pos=kRight, Int_t subpos=-1)
Start embedding external frame in the tab "pos" and tab element "subpos".
TGTab * GetTabRight() const
void Close()
Called via TCanvasImp interface by TCanvas.
UInt_t GetCwidth() const
Return width of canvas container.
void AdjustSize()
Keep the same canvas size while docking/undocking toolbar.
Bool_t HasToolTips() const
Returns kTRUE if the tooltips are enabled.
Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
Handle menu and other command generated by the user.
Bool_t HasMenuBar() const
Returns kTRUE if the menu bar is shown.
Bool_t HandleDNDDrop(TDNDData *data)
Handle drop events.
friend class TRootContainer
void CreateEditor()
Create embedded editor.
Bool_t HandleContainerKey(Event_t *ev)
Handle keyboard events in the canvas container.
Bool_t HasEditor() const
Returns kTRUE if the editor is shown.
virtual ~TRootCanvas()
Delete ROOT basic canvas.
TGLayoutHints * fMainFrameLayout
void SetCanvasSize(UInt_t w, UInt_t h)
Set size of canvas container. Units in pixels.
Bool_t HandleContainerButton(Event_t *ev)
Handle mouse button events in the canvas container.
Bool_t HandleContainerCrossing(Event_t *ev)
Handle enter/leave events. Only leave is activated at the moment.
UInt_t GetCheight() const
Return height of canvas container.
TGDockableFrame * fToolDock
void SetWindowSize(UInt_t w, UInt_t h)
Set size of canvas (units in pixels).
TGHorizontal3DLine * fHorizontal1
Bool_t HasToolBar() const
Returns kTRUE if the tool bar is shown.
void CloseWindow()
In case window is closed via WM we get here.
Int_t InitWindow()
Called by TCanvas ctor to get window indetifier.
Atom_t HandleDNDEnter(Atom_t *typelist)
Handle drag enter events.
TGLayoutHints * fEditorLayout
void ShowEditor(Bool_t show=kTRUE)
Show or hide side frame.
TGLayoutHints * fMenuBarItemLayout
const TGPicture * fIconPic
void PrintCanvas()
Print the canvas.
void ShowStatusBar(Bool_t show=kTRUE)
Show or hide statusbar.
Atom_t HandleDNDPosition(Int_t x, Int_t y, Atom_t action, Int_t xroot, Int_t yroot)
Handle dragging position events.
void SetWindowTitle(const char *newTitle)
Change title on window.
void Activated(Int_t id)
Slot handling tab switching in the browser, to properly set the canvas and the model to the editor.
TGHorizontal3DLine * fToolBarSep
TGPopupMenu * fViewWithMenu
TGPopupMenu * fEditClearMenu
TRootContainer * fCanvasContainer
Bool_t HasStatusBar() const
Returns kTRUE if the status bar is shown.
Bool_t HandleContainerDoubleClick(Event_t *ev)
Handle mouse button double click events in the canvas container.
TGLayoutHints * fHorizontal1Layout
TGVertical3DLine * fVertical2
TGLayoutHints * fMenuBarLayout
void FitCanvas()
Fit canvas container to current window size.
Bool_t HandleContainerMotion(Event_t *ev)
Handle mouse motion event in the canvas container.
void ShowMenuBar(Bool_t show=kTRUE)
Show or hide menubar.
void ShowToolBar(Bool_t show=kTRUE)
Show or hide toolbar.
TGLayoutHints * fMenuBarHelpLayout
TGPopupMenu * fOptionMenu
TRootCanvas(const TRootCanvas &)
void RaiseWindow()
Put canvas window on top of the window stack.
TGLayoutHints * fDockLayout
void SetWindowPosition(Int_t x, Int_t y)
Set canvas position (units in pixels).
void ShowToolTips(Bool_t show=kTRUE)
Enable or disable tooltip info.
Bool_t HandleDNDLeave()
Handle drag leave events.
void EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected)
Display a tooltip with infos about the primitive below the cursor.
void CreateCanvas(const char *name)
Create the actual canvas.
TGLayoutHints * fVertical1Layout
UInt_t GetWindowGeometry(Int_t &x, Int_t &y, UInt_t &w, UInt_t &h)
Gets the size and position of the window containing the canvas.
Bool_t HandleContainerConfigure(Event_t *ev)
Handle configure (i.e. resize) event.
TGCompositeFrame * fMainFrame
TGLayoutHints * fVertical2Layout
TVirtualPadEditor * fEditor
Bool_t HandleContainerExpose(Event_t *ev)
Handle expose events.
void SetStatusText(const char *txt=0, Int_t partidx=0)
Set text in status bar.
TGLayoutHints * fCanvasLayout
TGLayoutHints * fToolBarLayout
TGCompositeFrame * fEditorFrame
TGPopupMenu * fFileSaveMenu
void ReallyDelete()
Really delete the canvas and this GUI.
TGLayoutHints * fStatusBarLayout
TGVertical3DLine * fVertical1
void SetText(const char *helpText)
Set help text from helpText buffer in TGTextView.
void Popup()
Show help dialog.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
void SetOptTitle(Int_t tit=1)
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
Int_t GetOptTitle() const
void SetOptFit(Int_t fit=1)
The type of information about fit parameters printed in the histogram statistics box can be selected ...
virtual Int_t Exec(const char *shellcmd)
Execute a command.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
virtual FILE * TempFileName(TString &base, const char *dir=nullptr)
Create a secure temporary file by appending a unique 6 letter string to base.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
virtual const char * WorkingDirectory()
Return working directory.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual int Unlink(const char *name)
Unlink, i.e.
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
static void SingleShot(Int_t milliSec, const char *receiver_class, void *receiver, const char *method)
This static function calls a slot after a given time interval.
This class represents a WWW compatible URL.
const char * GetFile() const
Abstract base class used by ROOT graphics editor.
virtual TCanvas * GetCanvas() const =0
static TVirtualPadEditor * LoadEditor()
Static function returning a pointer to a new pad editor.
static TVirtualPadEditor * GetPadEditor(Bool_t load=kTRUE)
Returns the pad editor dialog. Static method.
virtual void SetGlobal(Bool_t)
static void Terminate()
Close the global pad editor. Static method.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
int main(int argc, char **argv)
static constexpr double s
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.