From 565552dda1fe78a01574abf7ea4cd754b2e7941a Mon Sep 17 00:00:00 2001
From: adrien-matta <a.matta@surrey.ac.uk>
Date: Sun, 14 Jun 2015 21:15:14 +0100
Subject: [PATCH] * Progress on NPOnline, now functionnal

---
 NPLib/Core/NPOnline.cxx       | 252 +++++++++++++++++++++++-----------
 NPLib/Core/NPOnline.h         |  59 ++++++--
 NPLib/Core/icons/download.png | Bin 0 -> 17547 bytes
 NPLib/Core/icons/download.xpm | 155 +++++++++++++++++++++
 NPLib/Core/icons/plugin.png   | Bin 0 -> 3250 bytes
 NPLib/Core/icons/plugin.xpm   | 162 ++++++++++++++++++++++
 NPLib/Core/icons/power.png    | Bin 0 -> 3747 bytes
 NPLib/Core/icons/power.xbm    | 117 ++++++++++++++++
 NPLib/Core/icons/power.xpm    | 134 ++++++++++++++++++
 NPLib/Core/icons/upload.png   | Bin 0 -> 3187 bytes
 NPLib/Sharc/TSharcSpectra.cxx |  30 ++--
 11 files changed, 799 insertions(+), 110 deletions(-)
 create mode 100644 NPLib/Core/icons/download.png
 create mode 100644 NPLib/Core/icons/download.xpm
 create mode 100644 NPLib/Core/icons/plugin.png
 create mode 100644 NPLib/Core/icons/plugin.xpm
 create mode 100644 NPLib/Core/icons/power.png
 create mode 100644 NPLib/Core/icons/power.xbm
 create mode 100644 NPLib/Core/icons/power.xpm
 create mode 100644 NPLib/Core/icons/upload.png

diff --git a/NPLib/Core/NPOnline.cxx b/NPLib/Core/NPOnline.cxx
index 4b1056503..f6844bcf6 100644
--- a/NPLib/Core/NPOnline.cxx
+++ b/NPLib/Core/NPOnline.cxx
@@ -18,88 +18,134 @@ NPL::NPOnline::NPOnline(){
   TString NPLPath = gSystem->Getenv("NPTOOL");
   gROOT->ProcessLine(Form(".x %s/NPLib/scripts/NPToolLogon.C+", NPLPath.Data()));
   gROOT->SetStyle("nptool");
-  
+
+  MakeGui();
+
+  m_Connect->Connect("Clicked()", "NPL::NPOnline", this, "Connect()");
+  m_Quit->SetCommand("gApplication->Terminate()");
+  m_Update->Connect("Clicked()", "NPL::NPOnline", this, "Update()");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void NPL::NPOnline::MakeGui(){
   m_BgColor = gROOT->GetColor(kGray+3)->GetPixel();
   m_FgColor = gROOT->GetColor(kAzure+7)->GetPixel();
 
-  m_Main = new TGMainFrame(0,0,0);
-  m_Main->SetCleanup(kDeepCleanup);
+  // main frame
+  m_Main = new TGMainFrame(gClient->GetRoot(),10,10,kMainFrame | kVerticalFrame);
+  m_Main->SetName("nponline");
   m_Main->SetBackgroundColor(m_BgColor);
   m_Main->SetForegroundColor(m_FgColor);
 
+  m_Main->SetLayoutBroken(kTRUE);
 
-  m_Tab= new TGTab(m_Main,100,100);
-  m_Tab->SetBackgroundColor(m_BgColor);
-  m_Tab->SetForegroundColor(m_FgColor);
-  m_Tab->ChangeSubframesBackground(m_BgColor);  
-  AddTab();
-  
-  // Create a horizonal frame containing two text buttons
-  m_Lhorz = new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 30);
-  m_Lresize = new TGLayoutHints(kLHintsExpandX|kLHintsExpandY, 0, 0, 0, 30);
-  m_Lbut = new TGLayoutHints(kLHintsCenterY, 10, 10, 0, 0);
-  m_Lcan = new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,30,30,30,30);
-  m_Horz = new TGHorizontalFrame(m_Main, 100, 100);
-  
-  m_Horz->SetBackgroundColor(m_BgColor);
-  m_Horz->SetForegroundColor(m_FgColor);
-
-  // Create "Connect" and "Quit" buttons
-  // Add to horizontal frame
-  m_Connect = new TGTextButton(m_Horz, "Connect");
-  m_Connect->Connect("Clicked()", "NPL::NPOnline", this, "Connect()");
-  m_Connect->SetBackgroundColor(m_BgColor);
-  m_Connect->SetForegroundColor(m_FgColor);
-
-  m_Quit = new TGTextButton(m_Horz, "Quit");
-  m_Quit->SetCommand("gApplication->Terminate()");
+  string NPLPath = gSystem->Getenv("NPTOOL");  
+  string path_quit = NPLPath+"/NPLib/Core/icons/power.xpm";
+  m_Quit = new TGPictureButton(m_Main,gClient->GetPicture(path_quit.c_str()),-1,TGPictureButton::GetDefaultGC()(),kChildFrame);
   m_Quit->SetBackgroundColor(m_BgColor);
-  m_Quit->SetForegroundColor(m_FgColor);
 
-  m_Update = new TGTextButton(m_Horz, "Update");
-  m_Update->Connect("Clicked()", "NPL::NPOnline", this, "Update()");
+  m_Main->AddFrame(m_Quit, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_Quit->MoveResize(10,10,32,32);
+  
+  string path_update = NPLPath+"/NPLib/Core/icons/download.xpm";
+  m_Update = new TGPictureButton(m_Main,gClient->GetPicture(path_update.c_str()),-1,TGPictureButton::GetDefaultGC()(),kChildFrame);
   m_Update->SetBackgroundColor(m_BgColor);
-  m_Update->SetForegroundColor(m_FgColor);
-
-  m_Horz->AddFrame(m_Quit, m_Lbut);
-  m_Horz->AddFrame(m_Connect, m_Lbut);
-  m_Horz->AddFrame(m_Update, m_Lbut);
-
-  m_Main->AddFrame(m_Horz, m_Lhorz);
-  m_Main->AddFrame(m_Tab, m_Lresize);
+  m_Main->AddFrame(m_Update, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_Update->MoveResize(45,10,32,32);
+ 
+  string path_connect = NPLPath+"/NPLib/Core/icons/plugin.xpm";
+  m_Connect = new TGPictureButton(m_Main,gClient->GetPicture(path_connect.c_str()),-1,TGPictureButton::GetDefaultGC()(),kChildFrame);
+  m_Connect->SetBackgroundColor(m_BgColor);
 
-  m_Main->SetWindowName("NPOnline");
+  m_Main->AddFrame(m_Connect, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_Connect->MoveResize(80,10,32,32);
+
+  TGFont* ufont;         // will reflect user font changes
+  ufont = gClient->GetFont("-*-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-1");
+
+  TGGC  * uGC;           // will reflect user GC changes
+  // graphics context changes
+  GCValues_t valress;
+  valress.fMask = kGCForeground | kGCBackground | kGCFillStyle | kGCFont | kGCGraphicsExposures;
+  gClient->GetColorByName("#000000",valress.fForeground);
+  gClient->GetColorByName("#e7e7e7",valress.fBackground);
+  valress.fFillStyle = kFillSolid;
+  valress.fFont = ufont->GetFontHandle();
+  valress.fGraphicsExposures = kFALSE;
+  uGC = gClient->GetGC(&valress, kTRUE);
+  m_Address = new TGTextEntry(m_Main, new TGTextBuffer(14),-1,uGC->GetGC(),ufont->GetFontStruct(),kSunkenFrame | kDoubleBorder | kOwnBackground);
+  m_Address->SetMaxLength(4096);
+  m_Address->SetAlignment(kTextLeft);
+  m_Address->SetText("localhost");
+  m_Address->Resize(200,m_Address->GetDefaultHeight());
+  m_Main->AddFrame(m_Address, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_Address->MoveResize(120,10,200,20);
+
+  m_Port = new TGNumberEntry(m_Main, (Double_t) 9090,9,-1,(TGNumberFormat::EStyle) 5);
+  m_Port->SetName("m_Port");
+  m_Main->AddFrame(m_Port, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
+  m_Port->MoveResize(330,10,80,30);
+
+  // canvas widget
+  TGCanvas* m_ListCanvas = new TGCanvas(m_Main,120,500);
+  m_ListCanvas->SetName("m_ListCanvas");
+
+  // canvas viewport
+  TGViewPort* fViewPort669 = m_ListCanvas->GetViewPort();
+
+  // list tree
+  m_CanvasListTree = new CanvasList(m_Main,m_ListCanvas);
+  m_ListTree = m_CanvasListTree->GetListTree();
+
+  fViewPort669->AddFrame(m_ListTree);
+  m_ListTree->SetLayoutManager(new TGHorizontalLayout(m_ListTree));
+  m_ListTree->MapSubwindows();
+
+  m_ListCanvas->SetContainer(m_ListTree);
+  m_ListCanvas->MapSubwindows();
+  m_Main->AddFrame(m_ListCanvas, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_ListCanvas->MoveResize(10,50,120,500);
+
+  // tab widget
+  m_Tab = new TGTab(m_Main,700,500);
+  m_Tab->Resize(m_Tab->GetDefaultSize());
+  m_Main->AddFrame(m_Tab, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+  m_Tab->MoveResize(144,50,700,500);
+  m_CanvasListTree->SetTab(m_Tab);
+  //AddTab();
+  m_Main->SetMWMHints(kMWMDecorAll,kMWMFuncAll,kMWMInputModeless);
   m_Main->MapSubwindows();
 
   m_Main->Resize(m_Main->GetDefaultSize());
   m_Main->MapWindow();
-
-  m_Main->Layout();
-  m_hist=0;
+  m_Main->Resize(900,600);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 NPL::NPOnline::~NPOnline(){
   delete m_Main; 
+  delete m_ListCanvas;
+  delete m_ListTree;
   delete m_Tab;
-  delete m_Lcan;
-  delete m_Horz;
-  delete m_Lbut;
-  delete m_Lhorz;
   delete m_Quit;
   delete m_Connect;
   delete m_Update;
   delete m_Sock;
+  delete m_Port;
+  delete m_Address;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 void NPL::NPOnline::Connect(){
   // Connect to SpectraServer
-  m_Sock = new TSocket("localhost", 9090);
+  m_Sock = new TSocket(m_Address->GetDisplayText(),(Int_t) m_Port->GetNumber());
   if(m_Sock->IsValid()){
     m_Connect->SetState(kButtonDisabled);
     Update();
   }
+  else{
+    cout << "Connection to " << m_Address->GetDisplayText() << " " <<(Int_t) m_Port->GetNumber() << " Failed" << endl;
+  }
 }
 ////////////////////////////////////////////////////////////////////////////////
 void NPL::NPOnline::Update(){
@@ -116,51 +162,93 @@ void NPL::NPOnline::Update(){
     return;
   }
   
+  m_CanvasListTree->Clear();
   m_CanvasList = (TList*) message->ReadObject(message->GetClass());
-  
-  
-  int current_tab = m_Tab->GetCurrent();
-  int tabs =  m_Tab->GetNumberOfTabs();
-  for(int i = tabs-1 ; i != -1 ; i--){
-    m_Tab->RemoveTab(i,false);
-  }
- 
+
+  TGCompositeFrame* tf; 
+  TRootEmbeddedCanvas* canvas;
   for(TCanvas* c = (TCanvas*) m_CanvasList->First() ; c !=0 ; c = (TCanvas*) m_CanvasList->After(c)){
-    AddTab(c->GetName(),c);
+    m_CanvasListTree->AddItem(c);
+
+    TGCompositeFrame*  tab =  m_Tab->GetTabContainer(c->GetName());
+    if(tab){
+      tab->RemoveAll();
+      TRootEmbeddedCanvas* canvas = new TRootEmbeddedCanvas("Canvas",tab,700,490,!kSunkenFrame); 
+      canvas->AdoptCanvas(c);
+      tab->AddFrame(canvas);
+      tab->SetLayoutManager(new TGVerticalLayout(tab));
+    }
+  
   }
-  if( m_Tab->GetNumberOfTabs()==0)
-    AddTab();
- 
+
   m_Main->MapSubwindows();
   m_Main->MapWindow();
   m_Main->Layout();
-  m_Tab->SetTab(current_tab);
 }
 
+////////////////////////////////////////////////////////////////////////////////
 
 ////////////////////////////////////////////////////////////////////////////////
-void NPL::NPOnline::AddTab(std::string name,TCanvas* c){
-  TGCompositeFrame* tf; 
-  TRootEmbeddedCanvas* canvas;
-  if(name=="default"){
-   tf = m_Tab->AddTab("NPOnline");
-  
-   canvas= new TRootEmbeddedCanvas("Canvas",tf,1600,800,!kSunkenFrame); 
-   canvas->GetCanvas()->SetMargin(0,0,0,0);
-   canvas->GetCanvas()->SetFillColor(kGray+3);
-   TImage* logo = TASImage::Open("nptoolLogo.png");
-   logo->SetConstRatio(true);
-   logo->Draw("");
+////////////////////////////////////////////////////////////////////////////////
+NPL::CanvasList::CanvasList(TGMainFrame* main, TGCanvas* parent){
+  m_popen = gClient->GetPicture("ofolder_t.xpm");
+  m_pclose = gClient->GetPicture("folder_t.xpm");
+  m_ListTree = new TGListTree(parent,kHorizontalFrame);
+  m_ListTree->Connect("DoubleClicked(TGListTreeItem*,Int_t)","NPL::CanvasList",this,"OnDoubleClick(TGListTreeItem*,Int_t)");
+  m_Main = main;
+}
+////////////////////////////////////////////////////////////////////////////////
+NPL::CanvasList::~CanvasList(){
+}
+////////////////////////////////////////////////////////////////////////////////
+void NPL::CanvasList::OnDoubleClick(TGListTreeItem* item, Int_t btn){
+  AddTab(item->GetText(),m_Canvas[item->GetText()]);
+}
+////////////////////////////////////////////////////////////////////////////////
+void NPL::CanvasList::AddItem(TCanvas* c){
+  TGListTreeItem*  item  = m_ListTree->AddItem(NULL,c->GetName());
+  item->SetPictures(m_popen, m_pclose);
+  m_Canvas[c->GetName()]=c;
+}
+////////////////////////////////////////////////////////////////////////////////
+void NPL::CanvasList::Clear(){
+  m_Canvas.clear();
+  TGListTreeItem* item =  m_ListTree->GetFirstItem() ;
+  while(item){
+   m_ListTree->DeleteItem(item);
+  item =  m_ListTree->GetFirstItem() ;
   }
-  
-  else{
-    tf = m_Tab->AddTab(name.c_str());
-    canvas= new TRootEmbeddedCanvas("Canvas",tf,1600,800,!kSunkenFrame); 
-    if(c)
-      canvas->AdoptCanvas(c);
+}
+////////////////////////////////////////////////////////////////////////////////
+TGListTree* NPL::CanvasList::GetListTree(){
+  return m_ListTree;
+}
+////////////////////////////////////////////////////////////////////////////////
+void NPL::CanvasList::AddTab(std::string name,TCanvas* c){
+  // If the tab exist, activate
+  if(m_Tab->GetTabTab(name.c_str())){
+      m_Tab->SetTab(name.c_str());
+    return;
   }
-  tf->SetBackgroundColor(m_BgColor);
-  tf->SetForegroundColor(m_FgColor);
-  tf->AddFrame(canvas,m_Lresize);
 
+  TGCompositeFrame* tf = m_Tab->AddTab(name.c_str());
+  TRootEmbeddedCanvas* canvas = new TRootEmbeddedCanvas("Canvas",tf,700,490,!kSunkenFrame); 
+     
+  if(c)
+    canvas->AdoptCanvas(c);
+ 
+  //  tf->SetBackgroundColor(m_BgColor);
+  //  tf->SetForegroundColor(m_FgColor);
+  tf->AddFrame(canvas);
+  tf->SetLayoutManager(new TGVerticalLayout(tf));
+  m_Tab->Resize(m_Tab->GetDefaultSize());
+  m_Tab->MoveResize(144,50,700,500);
+  m_Tab->SetTab(name.c_str());
+  m_Main->MapSubwindows();
+  m_Main->MapWindow();
+  m_Main->Layout();
+}
+////////////////////////////////////////////////////////////////////////////////
+void NPL::CanvasList::SetTab(TGTab* tab){
+  m_Tab=tab;
 }
diff --git a/NPLib/Core/NPOnline.h b/NPLib/Core/NPOnline.h
index 55f2ea3b0..d499fb962 100644
--- a/NPLib/Core/NPOnline.h
+++ b/NPLib/Core/NPOnline.h
@@ -6,10 +6,42 @@
 #include "TRootEmbeddedCanvas.h"
 #include "TH1.h"
 #include "TSocket.h"
+#include "TGListTree.h"
+#include "TGTextEntry.h"
+#include "TGNumberEntry.h"
+//#include "TGCanvasContainer.h"
 #include "RQ_OBJECT.h"
+#include<map>
 using namespace std;
 
 namespace NPL{
+  class CanvasList {
+    RQ_OBJECT("CanvasList")
+    protected:
+      TGMainFrame* m_Main;
+      TGListTree* m_ListTree;
+      TGTab* m_Tab;
+      map<string,TCanvas*> m_Canvas;
+      const TGPicture* m_popen;     
+      const TGPicture* m_pclose;    
+    
+
+    public:
+      CanvasList(TGMainFrame* main, TGCanvas* parent);
+      virtual ~CanvasList();
+
+      // slots
+      void OnDoubleClick(TGListTreeItem* item, Int_t btn);
+      
+      // Interface with NPOnline
+      void SetTab(TGTab* tab);
+      void AddItem(TCanvas* c);
+      void Clear();
+      TGListTree* GetListTree();
+      // Add a new Tab to the interface
+      void AddTab(std::string name="default",TCanvas* c=0);
+  };
+
   class NPOnline{
     RQ_OBJECT("NPOnline")
 
@@ -17,29 +49,28 @@ namespace NPL{
       NPOnline();
       ~NPOnline();
 
+      void MakeGui();
       void Connect();
       void Update();
-     
-      // Add a new Tab to the interface
-      void AddTab(std::string name="default",TCanvas* c=0);
-    
-    private: // Server client
+
+        private: // Server client
       TSocket* m_Sock;
       TList* m_CanvasList;
 
     private: // GUI stuff
       TGMainFrame* m_Main;
       TGTab* m_Tab;
-      TGLayoutHints* m_Lcan;
-      TGHorizontalFrame* m_Horz;
-      TGLayoutHints* m_Lbut;
-      TGLayoutHints* m_Lhorz;
-      TGLayoutHints* m_Lresize;
-      TGButton* m_Quit;
-      TGButton* m_Connect;
-      TGButton* m_Update;
+      TGPictureButton* m_Quit;
+      TGPictureButton* m_Connect;
+      TGPictureButton* m_Update;
+      TGTextEntry* m_Address; 
+      TGNumberEntry* m_Port; 
+      TGListTree* m_ListTree;
+      CanvasList* m_CanvasListTree;
+
+      TGCanvas* m_ListCanvas;
       
-    private: // Style
+          private: // Style
       Pixel_t m_BgColor;
       Pixel_t m_FgColor;
 
diff --git a/NPLib/Core/icons/download.png b/NPLib/Core/icons/download.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c2bc3694eac016f7a8f42f4fc4f676bae7e7213
GIT binary patch
literal 17547
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

literal 0
HcmV?d00001

diff --git a/NPLib/Core/icons/download.xpm b/NPLib/Core/icons/download.xpm
new file mode 100644
index 000000000..67cec5254
--- /dev/null
+++ b/NPLib/Core/icons/download.xpm
@@ -0,0 +1,155 @@
+/* XPM */
+static char *download[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 117 2 ",
+"   c #1786EE",
+".  c #1C8AF2",
+"X  c #1C8BF3",
+"o  c #1E8EF7",
+"O  c #2289EA",
+"+  c #258AE9",
+"@  c #268DEE",
+"#  c #328FE6",
+"$  c #338FE6",
+"%  c #3590E6",
+"&  c #208FF8",
+"*  c #2892F5",
+"=  c #2191FB",
+"-  c #2192FB",
+";  c #2193FE",
+":  c #2193FF",
+">  c #2293FE",
+",  c #2194FF",
+"<  c #2294FE",
+"1  c #2394FE",
+"2  c #2294FF",
+"3  c #2394FF",
+"4  c #2395FF",
+"5  c #2495FF",
+"6  c #2496FF",
+"7  c #2596FF",
+"8  c #2696FF",
+"9  c #2797FF",
+"0  c #2A97FD",
+"q  c #2897FF",
+"w  c #2C97FD",
+"e  c #2998FF",
+"r  c #2A98FF",
+"t  c #2B98FF",
+"y  c #2C98FD",
+"u  c #2D98FD",
+"i  c #2D99FF",
+"p  c #2E9AFF",
+"a  c #329CFF",
+"s  c #339CFF",
+"d  c #399FFF",
+"f  c #3BA0FF",
+"g  c #3CA0FF",
+"h  c #3CA1FF",
+"j  c #3DA1FF",
+"k  c #3EA1FF",
+"l  c #3EA2FF",
+"z  c #53A1EB",
+"x  c #45A5FF",
+"c  c #55A6F1",
+"v  c #52ABFF",
+"b  c #57AEFF",
+"n  c #5BB0FF",
+"m  c #5DB1FF",
+"M  c #5FB1FF",
+"N  c #71B0EB",
+"B  c #76B5EF",
+"V  c #77B5EF",
+"C  c #61ABF1",
+"Z  c #60B2FF",
+"A  c #63B3FF",
+"S  c #63B4FF",
+"D  c #64B4FF",
+"F  c #73B6F4",
+"G  c #74BCFF",
+"H  c #78BEFF",
+"J  c #8BBEEE",
+"K  c #9CC8F2",
+"L  c #97CCFF",
+"P  c #AACFF2",
+"I  c #A0D1FF",
+"U  c #A9D5FF",
+"Y  c #AAD6FF",
+"T  c #ABD6FF",
+"R  c #ADD7FF",
+"E  c #B7D7F4",
+"W  c #B8DAF9",
+"Q  c #B8DDFF",
+"!  c #BADEFF",
+"~  c #BBDEFF",
+"^  c #C3DDF6",
+"/  c #C3E0FB",
+"(  c #C1E1FF",
+")  c #C5E3FF",
+"_  c #C6E3FF",
+"`  c #D5EAFF",
+"'  c #D5EBFF",
+"]  c #DBEDFF",
+"[  c #DFF0FF",
+"{  c #E0EEFA",
+"}  c #E1EEFA",
+"|  c #E4F0FA",
+" . c #E4F0FB",
+".. c #E1F0FE",
+"X. c #E2F1FF",
+"o. c #E3F1FF",
+"O. c #E4F2FF",
+"+. c #E5F2FF",
+"@. c #E5F3FF",
+"#. c #E6F3FF",
+"$. c #E8F4FF",
+"%. c #F1F8FF",
+"&. c #F3F9FF",
+"*. c #F4FAFF",
+"=. c #F5FAFF",
+"-. c #F6FAFE",
+";. c #F6FAFF",
+":. c #F6FBFF",
+">. c #F8FBFE",
+",. c #F9FBFE",
+"<. c #F9FCFE",
+"1. c #F9FCFF",
+"2. c #FAFCFF",
+"3. c #FCFEFF",
+"4. c #FDFEFF",
+"5. c white",
+"6. c None",
+/* pixels */
+"6.6.6.6.6.6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.",
+"6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.",
+"6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.",
+"6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.",
+"6.6.5 5 5 5 5 5 5 5 5 t m b 5 5 5 0 Z m t 5 5 5 5 5 5 5 5 5 6.6.",
+"6.6.5 5 5 5 5 5 5 5 f U 2.] f 5 6 f | 2.U f 5 5 5 5 5 5 5 5 6.6.",
+"6.5 5 5 5 5 5 5 5 f ) 2.2.$.f 5 5 f | 2.2.) f 5 5 5 5 5 5 5 5 6.",
+"6.5 5 5 5 5 5 5 t U 2.2.2.$.d 5 5 f $.2.2.2.U t 5 5 5 5 5 5 5 6.",
+"6.5 5 5 5 5 5 5 Z 2.2.2.2.| f 5 6 f $.2.2.2.2.Z 5 5 5 5 5 5 5 6.",
+"5 5 5 5 5 5 5 a R 2.2.2.2.$.f 5 5 f | 2.2.2.2.U 5 5 5 5 5 5 5 5 ",
+"5 5 5 5 5 t H _ 2.2.2.P K V 0 5 5 t N K P 2.2.] a 5 5 5 5 5 5 5 ",
+"5 5 5 5 t I 2.2.2.2.2.C   . 5 5 5 5 .   C :.2.$.b 5 5 5 5 5 5 5 ",
+"5 5 5 5 G 2.2.2.2.2.2.] f 5 5 5 5 5 5 x ] 2.2.2.| ! n 5 5 5 5 5 ",
+"5 5 5 a _ 2.2.2.2.2.2.2.W a 5 5 5 5 t ! 2.2.2.2.2.2.$.m 5 5 5 5 ",
+"5 5 5 f $.2.2.2.2.2.2.2.2.L 0 5 5 5 L 2.2.2.2.2.2.2.2.~ t 5 5 5 ",
+"5 5 5 d | 2.2.2.2.2.2.2.2.:.G 5 5 G :.2.2.2.2.2.2.2.2.| f 5 5 5 ",
+"5 5 5 a _ 2.2.2.2.2.2.2.2.2.$.Z Z $.2.2.2.2.2.2.2.2.2.| f 5 5 5 ",
+"6.5 5 5 F 2.2.2.2.2.2.2.2.2.2.:.:.2.2.2.2.2.2.2.2.2.2.W t 5 5 6.",
+"6.5 5 5 * K 2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.| c 5 5 5 6.",
+"6.5 5 5 5 + N ^ } | $.| } | } } $.| | | $.| | | | E z 5 5 5 5 6.",
+"6.6.5 5 5 5 . + % % % % % % % # % % % % % % % % % + . 5 5 5 6.6.",
+"6.6.5 5 5 5 5 5 5 5 . 5 & 5 o 5 o 5 o 5 o 5 o 5 5 5 5 5 5 5 6.6.",
+"6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.",
+"6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.",
+"6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.",
+"6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.6.6.",
+"6.6.6.6.6.6.6.6.6.6.6.6.5 5 5 5 5 5 5 5 6.6.6.6.6.6.6.6.6.6.6.6."
+};
diff --git a/NPLib/Core/icons/plugin.png b/NPLib/Core/icons/plugin.png
new file mode 100644
index 0000000000000000000000000000000000000000..0eef10dd151596623309b3dd064c6b9a92ac9dc3
GIT binary patch
literal 3250
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

literal 0
HcmV?d00001

diff --git a/NPLib/Core/icons/plugin.xpm b/NPLib/Core/icons/plugin.xpm
new file mode 100644
index 000000000..a49da8832
--- /dev/null
+++ b/NPLib/Core/icons/plugin.xpm
@@ -0,0 +1,162 @@
+/* XPM */
+static char *plugin[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 124 2 ",
+"   c #4A5669",
+".  c #4B576B",
+"X  c #4C5A6E",
+"o  c #4E5B71",
+"O  c #4E5B72",
+"+  c #4E5C71",
+"@  c #4E5C72",
+"#  c #4F5C72",
+"$  c #4E5D72",
+"%  c #4E5C73",
+"&  c #4F5C73",
+"*  c #4F5D73",
+"=  c #505F74",
+"-  c #516175",
+";  c #526777",
+":  c #516875",
+">  c #526778",
+",  c #536B79",
+"<  c #546F78",
+"1  c #556F7C",
+"2  c #56727C",
+"3  c #56737D",
+"4  c #57747E",
+"5  c #577A7C",
+"6  c #577280",
+"7  c #587880",
+"8  c #597B81",
+"9  c #597982",
+"0  c #597A82",
+"q  c #5B7D86",
+"w  c #5C7E86",
+"e  c #6E7F89",
+"r  c #5A8083",
+"t  c #5B8183",
+"y  c #5B8583",
+"u  c #5C8385",
+"i  c #5D8788",
+"p  c #5E858B",
+"a  c #60898D",
+"s  c #618E8F",
+"d  c #70838D",
+"f  c #61928D",
+"g  c #7C8690",
+"h  c #639192",
+"j  c #649393",
+"k  c #659C93",
+"l  c #659D93",
+"z  c #659994",
+"x  c #66A095",
+"c  c #69A09A",
+"v  c #69A09B",
+"b  c #6BA59E",
+"n  c #6BA89C",
+"m  c #6BAA9D",
+"M  c #6CAB9F",
+"N  c #71AB9E",
+"B  c #6EAFA1",
+"V  c #6DB0A0",
+"C  c #6EB1A1",
+"Z  c #6EB2A1",
+"A  c #6FB4A2",
+"S  c #6FB0A4",
+"D  c #6FB5A4",
+"F  c #73B2A1",
+"G  c #70B1A5",
+"H  c #70B5A4",
+"J  c #70B6A4",
+"K  c #71B9A7",
+"L  c #77B9A7",
+"P  c #72B6A8",
+"I  c #72B7A8",
+"U  c #72B8A9",
+"Y  c #72BAA8",
+"T  c #72B9AA",
+"R  c #73B9AA",
+"E  c #73BDAA",
+"W  c #74BDAB",
+"Q  c #74BEAB",
+"!  c #74BFAC",
+"~  c #74BFAD",
+"^  c #75BFAD",
+"/  c #79BAAB",
+"(  c #74C0AD",
+")  c #75C0AD",
+"_  c #75C0AE",
+"`  c #75C1AE",
+"'  c #76C1AE",
+"]  c #74C2AE",
+"[  c #74C2AF",
+"{  c #75C2AF",
+"}  c #76C2AE",
+"|  c #76C2AF",
+" . c #77C2AF",
+".. c #76C3AF",
+"X. c #76C3B0",
+"o. c #77C3B0",
+"O. c #77C4B0",
+"+. c #7AC3B0",
+"@. c #7CC4B1",
+"#. c #7DC4B1",
+"$. c #90B3A8",
+"%. c #97BCAD",
+"&. c #98C1B1",
+"*. c #98C3B5",
+"=. c #93CAB8",
+"-. c #9ECDBC",
+";. c #AFC7B8",
+":. c #A0CCBB",
+">. c #A0CEBC",
+",. c #A1CEBD",
+"<. c #B0C8B9",
+"1. c #B6D4C3",
+"2. c #B7D5C4",
+"3. c #C4D8C8",
+"4. c #D0D2C7",
+"5. c #D0D3C7",
+"6. c #D9DCCD",
+"7. c #DADDCE",
+"8. c #DADECF",
+"9. c #DBE0D0",
+"0. c #E0E0D1",
+"q. c #E1E0D1",
+"w. c #E2E1D2",
+"e. c None",
+/* pixels */
+"e.e.e.e.e.e.e.e.e.e.e.e.| | | | | | | | e.e.e.e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.| | | | | | | | | | | | | | e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.| | | | | | | | | | | | | | | | | | e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.| | | | | | | | | | | | | | | | | | | | e.e.e.e.e.e.",
+"e.e.e.e.e.| | | | | | | | | | | | | | | | | | | | | | e.e.e.e.e.",
+"e.e.e.e.| | | | | | | | | | | | | | @.,.=.| | | | | | | e.e.e.e.",
+"e.e.e.| | | | | | | | | | o.o.| | @.1.0.3. .| | | | | | | e.e.e.",
+"e.e.| | | | | | | | | | U v U o.@.1.0.6.&.| | | | | | | | | e.e.",
+"e.e.| | | | | | | | | o.h O q / 2.9.6.%.F | | | | | | | | | e.e.",
+"e.| | | | | | | | | | o.z X O d 5.6.%.D o.| | | | | | | | | | e.",
+"e.| | | | | | | | | o.U q   O O g $.D | o.| | | | @.| | | | | e.",
+"e.| | | | | | | | | U q O X   O O q I o.| | | | -.3.=.| | | | e.",
+"| | | | | | | | o.U q O = O X   O O q U | | | -.6.0.-.o.| | | | ",
+"| | | | | | | | U p = O O = O O   O O q U o.,.9.0.;.L o.| | | | ",
+"| | | | | | | o.B - O O = = O = X   O O q *.9.0.<.F U o.| | | | ",
+"| | | | | | | | a O O = O O = O = X   O O g 4.<.F | | | | | | | ",
+"| | | | | | | | w O O O O O = O O O X X X = d m | | | | | | | | ",
+"| | | | | | | | p O = = = = O O = O O X   X O 8 U | | | | | | | ",
+"| | | | | | | o.s O = O O = O = O = O = X   O O v | | | | | | | ",
+"| | | | | | | o.B ; O O = O = O O O = O O 2 y y D | | | | | | | ",
+"e.| | | | | | | U p O O = O = = = O O O 2 m L D U | | | | | | e.",
+"e.| | | | | | o.D , X O O O O O O = O 2 m | | | o.| | | | | | e.",
+"e.| | | | | o.D 6 O : 5 , O O O O - q m | | | | o.o.| | | | | e.",
+"e.e.| | | o.o.h O , z D z y 5 2 5 f V | | | | | | | | | | | e.e.",
+"e.e.| | | | o.m y z | | | L V V L U | | | | | | | | | | | | e.e.",
+"e.e.e.| | | o.U D U | | | | | | | o.| | | | | | | | | | | e.e.e.",
+"e.e.e.e.| | | | | | | | | | | | | | | | | | | | | | | | e.e.e.e.",
+"e.e.e.e.e.| | | | | | | | | | | | | | | | | | | | | | e.e.e.e.e.",
+"e.e.e.e.e.e.| | | | | | | | | | | | | | | | | | | | e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.| | | | | | | | | | | | | | | | | | e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.| | | | | | | | | | | | | | e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.e.e.e.| | | | | | | | e.e.e.e.e.e.e.e.e.e.e.e."
+};
diff --git a/NPLib/Core/icons/power.png b/NPLib/Core/icons/power.png
new file mode 100644
index 0000000000000000000000000000000000000000..f379b4b3c5f12c4cea5229e07259dcd0024adc10
GIT binary patch
literal 3747
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
N002ovPDHLkV1lME0c8LH

literal 0
HcmV?d00001

diff --git a/NPLib/Core/icons/power.xbm b/NPLib/Core/icons/power.xbm
new file mode 100644
index 000000000..2fd52e56f
--- /dev/null
+++ b/NPLib/Core/icons/power.xbm
@@ -0,0 +1,117 @@
+#define power_width 128
+#define power_height 128
+static unsigned short power_bits[] = {
+   0x0000, 0x0000, 0x0000, 0xffc0, 0x03ff, 0x0000, 0x0000, 0x0000, 0x0000,
+   0x0000, 0x0000, 0xfffe, 0x7fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+   0xc000, 0xffff, 0xffff, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0xf800,
+   0xffff, 0xffff, 0x001f, 0x0000, 0x0000, 0x0000, 0x0000, 0xff00, 0xffff,
+   0xffff, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc0, 0xffff, 0xffff,
+   0x03ff, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xffff, 0xffff, 0x1fff,
+   0x0000, 0x0000, 0x0000, 0x0000, 0xfffe, 0xffff, 0xffff, 0x7fff, 0x0000,
+   0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000,
+   0x0000, 0xc000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0003, 0x0000, 0x0000,
+   0xf000, 0xffff, 0xffff, 0xffff, 0xffff, 0x000f, 0x0000, 0x0000, 0xf800,
+   0xffff, 0xffff, 0xffff, 0xffff, 0x001f, 0x0000, 0x0000, 0xfc00, 0xffff,
+   0xffff, 0xffff, 0xffff, 0x003f, 0x0000, 0x0000, 0xff00, 0xffff, 0xffff,
+   0xffff, 0xffff, 0x00ff, 0x0000, 0x0000, 0xff80, 0xffff, 0xffff, 0xffff,
+   0xffff, 0x01ff, 0x0000, 0x0000, 0xffc0, 0xffff, 0xffff, 0xffff, 0xffff,
+   0x03ff, 0x0000, 0x0000, 0xffe0, 0xffff, 0xffff, 0xffff, 0xffff, 0x07ff,
+   0x0000, 0x0000, 0xfff0, 0xffff, 0xffff, 0xffff, 0xffff, 0x0fff, 0x0000,
+   0x0000, 0xfff8, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fff, 0x0000, 0x0000,
+   0xfffc, 0xffff, 0xffff, 0xffff, 0xffff, 0x3fff, 0x0000, 0x0000, 0xfffe,
+   0xffff, 0x3fff, 0xfffc, 0xffff, 0x7fff, 0x0000, 0x0000, 0xffff, 0xffff,
+   0x1fff, 0xfff8, 0xffff, 0xffff, 0x0000, 0x8000, 0xffff, 0xffff, 0x0fff,
+   0xfff0, 0xffff, 0xffff, 0x0001, 0xc000, 0xffff, 0xffff, 0x0fff, 0xfff0,
+   0xffff, 0xffff, 0x0003, 0xe000, 0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff,
+   0xffff, 0x0007, 0xe000, 0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff,
+   0x0007, 0xf000, 0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x000f,
+   0xf800, 0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x001f, 0xfc00,
+   0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x003f, 0xfc00, 0xffff,
+   0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x003f, 0xfe00, 0xffff, 0xffff,
+   0x0fff, 0xfff0, 0xffff, 0xffff, 0x007f, 0xfe00, 0xffff, 0xffff, 0x0fff,
+   0xfff0, 0xffff, 0xffff, 0x007f, 0xff00, 0xffff, 0x3fff, 0x0ffd, 0x1ff0,
+   0xfffc, 0xffff, 0x00ff, 0xff80, 0xffff, 0x1fff, 0x0ff8, 0x1ff0, 0xfff8,
+   0xffff, 0x01ff, 0xff80, 0xffff, 0x07ff, 0x0ff8, 0x0ff0, 0xffe0, 0xffff,
+   0x01ff, 0xffc0, 0xffff, 0x03ff, 0x0ff0, 0x0ff0, 0xffc0, 0xffff, 0x03ff,
+   0xffc0, 0xffff, 0x00ff, 0x0ff0, 0x07f0, 0xff00, 0xffff, 0x03ff, 0xffc0,
+   0xffff, 0x00ff, 0x0ff0, 0x0ff0, 0xff00, 0xffff, 0x03ff, 0xffe0, 0xffff,
+   0x003f, 0x0ff8, 0x0ff0, 0xfc00, 0xffff, 0x07ff, 0xffe0, 0xffff, 0x003f,
+   0x0ffc, 0x3ff0, 0xfc00, 0xffff, 0x07ff, 0xfff0, 0xffff, 0x000f, 0x0ffe,
+   0x7ff0, 0xf000, 0xffff, 0x0fff, 0xfff0, 0xffff, 0x800f, 0x0fff, 0xfff0,
+   0xf001, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xc007, 0x0fff, 0xfff0, 0xe003,
+   0xffff, 0x0fff, 0xfff8, 0xffff, 0xe003, 0x0fff, 0xfff0, 0xc007, 0xffff,
+   0x1fff, 0xfff8, 0xffff, 0xf003, 0x0fff, 0xfff0, 0xc00f, 0xffff, 0x1fff,
+   0xfff8, 0xffff, 0xf801, 0x0fff, 0xfff0, 0x801f, 0xffff, 0x1fff, 0xfffc,
+   0xffff, 0xfc00, 0x0fff, 0xfff0, 0x003f, 0xffff, 0x3fff, 0xfffc, 0xffff,
+   0xfc00, 0x0fff, 0xfff0, 0x007f, 0xffff, 0x3fff, 0xfffc, 0x7fff, 0xfe00,
+   0x0fff, 0xfff0, 0x007f, 0xfffe, 0x3fff, 0xfffe, 0x7fff, 0xff00, 0x0fff,
+   0xfff0, 0x00ff, 0xfffe, 0x7fff, 0xfffe, 0x7fff, 0xff80, 0x0fff, 0xfff0,
+   0x00ff, 0xfffe, 0x7fff, 0xfffe, 0x3fff, 0xff80, 0x0fff, 0xfff0, 0x01ff,
+   0xfffc, 0x7fff, 0xfffe, 0x3fff, 0xffc0, 0x0fff, 0xfff0, 0x03ff, 0xfffc,
+   0x7fff, 0xfffe, 0x3fff, 0xffc0, 0x0fff, 0xfff0, 0x03ff, 0xfff8, 0x7fff,
+   0xffff, 0x1fff, 0xffc0, 0x0fff, 0xfff0, 0x03ff, 0xfff8, 0xffff, 0xffff,
+   0x1fff, 0xffe0, 0x0fff, 0xfff0, 0x07ff, 0xfff8, 0xffff, 0xffff, 0x1fff,
+   0xffe0, 0x0fff, 0xfff0, 0x07ff, 0xfff8, 0xffff, 0xffff, 0x0fff, 0xffe0,
+   0x0fff, 0xfff0, 0x07ff, 0xfff0, 0xffff, 0xffff, 0x1fff, 0xfff0, 0x0fff,
+   0xfff0, 0x07ff, 0xfff8, 0xffff, 0xffff, 0x0fff, 0xffe0, 0x0fff, 0xfff0,
+   0x0fff, 0xfff0, 0xffff, 0xffff, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0x0fff,
+   0xfff0, 0xffff, 0xffff, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0x0fff, 0xfff0,
+   0xffff, 0xffff, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0xffff,
+   0xffff, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0xffff, 0xffff,
+   0x0fff, 0xfff0, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x0fff,
+   0xfff0, 0x0fff, 0xfff0, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x0fff, 0xfff0,
+   0x1fff, 0xfff8, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x0fff, 0xfff0, 0x3fff,
+   0xfffc, 0x0fff, 0xfff0, 0xffff, 0xffff, 0x0fff, 0xfff0, 0xffff, 0xffff,
+   0x07ff, 0xfff0, 0xffff, 0xffff, 0x1fff, 0xffe0, 0xffff, 0xffff, 0x0fff,
+   0xfff0, 0xffff, 0xffff, 0x0fff, 0xffe0, 0xffff, 0xffff, 0x07ff, 0xfff8,
+   0xffff, 0xffff, 0x1fff, 0xffe0, 0xffff, 0xffff, 0x07ff, 0xfff8, 0xffff,
+   0xffff, 0x1fff, 0xffe0, 0xffff, 0xffff, 0x07ff, 0xfff8, 0xffff, 0xffff,
+   0x1fff, 0xffc0, 0xffff, 0xffff, 0x03ff, 0xfff8, 0xffff, 0xfffe, 0x3fff,
+   0xffc0, 0xffff, 0xffff, 0x03ff, 0xfffc, 0x7fff, 0xfffe, 0x3fff, 0xff80,
+   0xffff, 0xffff, 0x01ff, 0xfffc, 0x7fff, 0xfffe, 0x3fff, 0xff80, 0xffff,
+   0xffff, 0x01ff, 0xfffc, 0x7fff, 0xfffe, 0x7fff, 0xff00, 0xffff, 0xffff,
+   0x01ff, 0xfffc, 0x7fff, 0xfffe, 0x7fff, 0xff00, 0xffff, 0xffff, 0x00ff,
+   0xfffe, 0x7fff, 0xfffc, 0x7fff, 0xfe00, 0xffff, 0xffff, 0x007f, 0xffff,
+   0x3fff, 0xfffc, 0xffff, 0xfc00, 0xffff, 0xffff, 0x003f, 0xffff, 0x3fff,
+   0xfffc, 0xffff, 0xfc01, 0xffff, 0xffff, 0x003f, 0xffff, 0x3fff, 0xfff8,
+   0xffff, 0xf801, 0xffff, 0xffff, 0x801f, 0xffff, 0x1fff, 0xfff8, 0xffff,
+   0xf003, 0xffff, 0xffff, 0xc00f, 0xffff, 0x1fff, 0xfff8, 0xffff, 0xe003,
+   0xffff, 0xffff, 0xc007, 0xffff, 0x1fff, 0xfff0, 0xffff, 0xc007, 0xffff,
+   0xffff, 0xe003, 0xffff, 0x0fff, 0xfff0, 0xffff, 0x000f, 0xffff, 0xffff,
+   0xf000, 0xffff, 0x0fff, 0xfff0, 0xffff, 0x001f, 0xfffe, 0x7fff, 0xf800,
+   0xffff, 0x0fff, 0xffe0, 0xffff, 0x001f, 0xfff8, 0x1fff, 0xfc00, 0xffff,
+   0x07ff, 0xffe0, 0xffff, 0x007f, 0xffe0, 0x07ff, 0xfc00, 0xffff, 0x07ff,
+   0xffc0, 0xffff, 0x007f, 0xff80, 0x00ff, 0xff00, 0xffff, 0x03ff, 0xffc0,
+   0xffff, 0x01ff, 0xe800, 0x0017, 0xff80, 0xffff, 0x03ff, 0xffc0, 0xffff,
+   0x03ff, 0x0000, 0x0000, 0xffc0, 0xffff, 0x03ff, 0xff80, 0xffff, 0x07ff,
+   0x0000, 0x0000, 0xffe0, 0xffff, 0x01ff, 0xff80, 0xffff, 0x1fff, 0x0000,
+   0x0000, 0xfff8, 0xffff, 0x01ff, 0xff00, 0xffff, 0x7fff, 0x0000, 0x0000,
+   0xfffc, 0xffff, 0x00ff, 0xfe00, 0xffff, 0xffff, 0x0000, 0x8000, 0xffff,
+   0xffff, 0x007f, 0xfe00, 0xffff, 0xffff, 0x0007, 0xc000, 0xffff, 0xffff,
+   0x007f, 0xfc00, 0xffff, 0xffff, 0x003f, 0xfc00, 0xffff, 0xffff, 0x003f,
+   0xfc00, 0xffff, 0xffff, 0x05ff, 0xffa0, 0xffff, 0xffff, 0x003f, 0xf800,
+   0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x001f, 0xf000, 0xffff,
+   0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x000f, 0xe000, 0xffff, 0xffff,
+   0xffff, 0xffff, 0xffff, 0xffff, 0x0007, 0xe000, 0xffff, 0xffff, 0xffff,
+   0xffff, 0xffff, 0xffff, 0x0007, 0xc000, 0xffff, 0xffff, 0xffff, 0xffff,
+   0xffff, 0xffff, 0x0003, 0x8000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+   0xffff, 0x0001, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+   0x0000, 0x0000, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0x7fff, 0x0000,
+   0x0000, 0xfffc, 0xffff, 0xffff, 0xffff, 0xffff, 0x3fff, 0x0000, 0x0000,
+   0xfff8, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fff, 0x0000, 0x0000, 0xfff0,
+   0xffff, 0xffff, 0xffff, 0xffff, 0x0fff, 0x0000, 0x0000, 0xffe0, 0xffff,
+   0xffff, 0xffff, 0xffff, 0x07ff, 0x0000, 0x0000, 0xffc0, 0xffff, 0xffff,
+   0xffff, 0xffff, 0x03ff, 0x0000, 0x0000, 0xff80, 0xffff, 0xffff, 0xffff,
+   0xffff, 0x01ff, 0x0000, 0x0000, 0xff00, 0xffff, 0xffff, 0xffff, 0xffff,
+   0x00ff, 0x0000, 0x0000, 0xfc00, 0xffff, 0xffff, 0xffff, 0xffff, 0x003f,
+   0x0000, 0x0000, 0xf800, 0xffff, 0xffff, 0xffff, 0xffff, 0x001f, 0x0000,
+   0x0000, 0xf000, 0xffff, 0xffff, 0xffff, 0xffff, 0x000f, 0x0000, 0x0000,
+   0xc000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0003, 0x0000, 0x0000, 0x0000,
+   0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xfffe,
+   0xffff, 0xffff, 0x7fff, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xffff,
+   0xffff, 0x1fff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc0, 0xffff, 0xffff,
+   0x03ff, 0x0000, 0x0000, 0x0000, 0x0000, 0xff00, 0xffff, 0xffff, 0x00ff,
+   0x0000, 0x0000, 0x0000, 0x0000, 0xf800, 0xffff, 0xffff, 0x001f, 0x0000,
+   0x0000, 0x0000, 0x0000, 0xc000, 0xffff, 0xffff, 0x0003, 0x0000, 0x0000,
+   0x0000, 0x0000, 0x0000, 0xfffe, 0x7fff, 0x0000, 0x0000, 0x0000, 0x0000,
+   0x0000, 0x0000, 0xffc0, 0x03ff, 0x0000, 0x0000, 0x0000 };
diff --git a/NPLib/Core/icons/power.xpm b/NPLib/Core/icons/power.xpm
new file mode 100644
index 000000000..d5dd4c059
--- /dev/null
+++ b/NPLib/Core/icons/power.xpm
@@ -0,0 +1,134 @@
+/* XPM */
+static char *power[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 96 2 ",
+"   c #B25555",
+".  c #BA5555",
+"X  c #BB5757",
+"o  c #BE5757",
+"O  c #B25E5E",
+"+  c #B45D5D",
+"@  c #B65D5D",
+"#  c #B55E5E",
+"$  c #BE5858",
+"%  c #B46565",
+"&  c #B86969",
+"*  c #BA6969",
+"=  c #BD6B6B",
+"-  c #BE7B7B",
+";  c #C15858",
+":  c #C25959",
+">  c #C35959",
+",  c #C45959",
+"<  c #C55959",
+"1  c #C45A5A",
+"2  c #C55B5B",
+"3  c #C65A5A",
+"4  c #C65B5B",
+"5  c #C75B5B",
+"6  c #C55C5C",
+"7  c #C65C5C",
+"8  c #C75C5C",
+"9  c #C75D5D",
+"0  c #C16262",
+"q  c #C96161",
+"w  c #C96262",
+"e  c #C86363",
+"r  c #C86565",
+"t  c #CA6464",
+"y  c #CA6565",
+"u  c #C96666",
+"i  c #CA6666",
+"p  c #CB6767",
+"a  c #CA6A6A",
+"s  c #CC6B6B",
+"d  c #CD6E6E",
+"f  c #CD6F6F",
+"g  c #CE6F6F",
+"h  c #CA7070",
+"j  c #CE7171",
+"k  c #CD7272",
+"l  c #CF7272",
+"z  c #C47D7D",
+"x  c #CB8080",
+"c  c #C58888",
+"v  c #C48989",
+"b  c #CE8D8D",
+"n  c #D48383",
+"m  c #D98F8F",
+"M  c #D99191",
+"N  c #D6A7A7",
+"B  c #DDBDBD",
+"V  c #DEBDBD",
+"C  c #E2ABAB",
+"Z  c #E3BFBF",
+"A  c #E8BCBC",
+"S  c #E5C7C7",
+"D  c #EAC1C1",
+"F  c #EAC2C2",
+"G  c #EAC3C3",
+"H  c #E6CFCF",
+"J  c #E7CFCF",
+"K  c #EDCACA",
+"L  c #EACECE",
+"P  c #EECFCF",
+"I  c #ECD7D7",
+"U  c #EDDCDC",
+"Y  c #F0D2D2",
+"T  c #F0D3D3",
+"R  c #F1DDDD",
+"E  c #F4DEDE",
+"W  c #F0E1E1",
+"Q  c #F6E4E4",
+"!  c #F4EAEA",
+"~  c #F4EBEB",
+"^  c #F7EEEE",
+"/  c #F8EBEB",
+"(  c #F8ECEC",
+")  c #F9ECEC",
+"_  c #F9EDED",
+"`  c #F9EFEF",
+"'  c #FAEFEF",
+"]  c #FBF8F8",
+"[  c #FDF9F9",
+"{  c #FDFAFA",
+"}  c #FCFBFB",
+"|  c #FEFCFC",
+" . c #FEFDFD",
+".. c #FFFEFE",
+"X. c white",
+"o. c None",
+/* pixels */
+"o.o.o.o.o.o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.o.o.o.o.o.",
+"o.o.o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.o.o.",
+"o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.",
+"o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.",
+"o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 i i 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.",
+"o.o.o.o.8 8 8 8 8 8 8 8 8 8 i K K i 8 8 8 8 8 8 8 8 8 8 o.o.o.o.",
+"o.o.o.8 8 8 8 8 8 8 8 8 8 8 j / / d 8 8 8 8 8 8 8 8 8 8 8 o.o.o.",
+"o.o.8 8 8 8 8 8 8 8 8 i 5 8 j / / j 8 i i 8 8 8 8 8 8 8 8 8 o.o.",
+"o.o.8 8 8 8 8 8 8 8 n K A q d / / d d Y Y n 9 9 8 8 8 8 8 8 o.o.",
+"o.8 8 8 8 8 8 8 8 m / X.J q d / / d i I X./ m 9 8 8 8 8 8 8 8 o.",
+"o.8 8 8 8 8 8 8 n / X.B & 8 j / / j , % A X./ z 8 8 8 8 8 8 8 o.",
+"o.8 8 8 8 8 8 i Y X.B @ 8 5 j / / j 8 o @ B X.I i 8 8 8 8 8 8 o.",
+"8 8 8 8 8 8 8 M X.U = 8 8 8 d / / j 5 5 , = U X.m 8 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 8 D X.N 8 5 8 8 j / / j 5 5 8 8 N X.D 8 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 i E X.z 5 5 8 , d / / j 5 5 5 5 z X.E i 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 d / ~ d 5 5 8 8 d / / j 5 5 5 5 j ~ / d 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 d ~ ~ d 8 8 8 8 i S J i 8 8 5 5 d / / d 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 i E X.n , 8 8 8 8 @ @ 8 8 8 5 , n X.E i 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 , A X.C 8 8 8 8 5 8 , 8 8 8 8 8 C X.A 8 8 8 8 8 8 8 ",
+"8 8 8 8 8 8 , b X.W d 8 8 8 5 5 8 8 8 8 8 j W X.b 8 8 8 8 8 8 8 ",
+"o.8 8 8 8 8 8 & K X.D i 8 8 8 5 8 8 8 8 i D X.J q 8 8 8 8 8 8 o.",
+"o.8 8 8 8 8 8 8 z ~ X.D d 8 , 5 8 , 8 d D X.~ z $ 8 8 8 8 8 8 o.",
+"o.8 8 8 8 8 8 8 $ v ~ X.W C n j d n C E X.~ c o 8 8 8 8 8 8 8 o.",
+"o.o.8 8 8 8 8 8 8 o - J X.X.X.~ / X.X.X.J - o 8 8 8 8 8 8 8 o.o.",
+"o.o.8 8 8 8 8 8 8 8 o @ v B U ~ ~ U B v @ $ 8 8 8 8 8 8 8 8 o.o.",
+"o.o.o.8 8 8 8 8 8 8 8 8 .   @ % % O   . 8 8 8 8 8 8 8 8 8 o.o.o.",
+"o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 $ $ 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.",
+"o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.",
+"o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.",
+"o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.",
+"o.o.o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.o.o.",
+"o.o.o.o.o.o.o.o.o.o.o.o.8 8 8 8 8 8 8 8 o.o.o.o.o.o.o.o.o.o.o.o."
+};
diff --git a/NPLib/Core/icons/upload.png b/NPLib/Core/icons/upload.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ce606b0c1aecd8435021cac323b25f0fc5ef3fb
GIT binary patch
literal 3187
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
Z0RSyNoY@$+4$%Mr002ovPDHLkV1jDT<m&(c

literal 0
HcmV?d00001

diff --git a/NPLib/Sharc/TSharcSpectra.cxx b/NPLib/Sharc/TSharcSpectra.cxx
index f459114fc..a0177b8e1 100644
--- a/NPLib/Sharc/TSharcSpectra.cxx
+++ b/NPLib/Sharc/TSharcSpectra.cxx
@@ -67,46 +67,48 @@ TSharcSpectra::~TSharcSpectra(){
 
 ////////////////////////////////////////////////////////////////////////////////
 void TSharcSpectra::InitRawSpectra(){
-  TCanvas* c1 = new TCanvas("SharcRaw","Sharc Raw");
-  TCanvas* c2 = new TCanvas("SharcRawPAD","Sharc Raw PAD");
 
-  c1->Divide(fNumberOfDetector,4);
-  c2->Divide(fNumberOfDetector,2);
   string name;
   for (unsigned int i = 0; i < fNumberOfDetector; i++) { // loop on number of detectors
+  name = "SharcRaw"+NPL::itoa(i+1);
+  TCanvas* c1 = new TCanvas(name.c_str(),name.c_str());
+  c1->Divide(3,2);
+  int i1 = 0;  
     // STR_FRONT_E_RAW
-    c1->cd(i+2);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_STR_FRONT_E_RAW";
     AddHisto2D(name, name, fStripFront, 1, fStripFront+1, 512, 0, 8192, "SHARC/RAW/STR_FRONT_E")->Draw("colz");
 
     // STR_BACK_E_RAW
-    c1->cd(i+3);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_STR_BACK_E_RAW";
     AddHisto2D(name, name, fStripBack, 1, fStripBack+1, 512, 0, 8192, "SHARC/RAW/STR_BACK_E")->Draw("colz");
 
     // PAD_E_RAW
-    c2->cd(i+5);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_PAD_E_RAW";
     AddHisto1D(name, name, 512, 0, 16384, "SHARC/RAW/PAD_E")->Draw("");
 
     // STR_FRONT_RAW_MULT
-    c1->cd(i+4);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_STR_FRONT_RAW_MULT";
     AddHisto1D(name, name, fStripFront, 1, fStripFront+1, "SHARC/RAW/MULT")->Draw("");
-
+    gPad->SetLogy();
+  
     // STR_BACK_RAW_MULT
-    c1->cd(i+5);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_STR_BACK_RAW_MULT";
     AddHisto1D(name, name, fStripFront, 1, fStripFront+1, "SHARC/RAW/MULT")->Draw("");
+    gPad->SetLogy();
 
     // PAD_RAW_MULT
-    c2->cd(i+2);
+    c1->cd(++i1);
     name = "SHARC"+NPL::itoa(i+1)+"_PAD_RAW_MULT";
     AddHisto1D(name, name, fNumberOfDetector, 1, fNumberOfDetector+1, "SHARC/RAW/MULT")->Draw("");
-
+    gPad->SetLogy();
+    
+    AddCanvas(c1);  
   } // end loop on number of detectors
-  AddCanvas(c1);  
-  AddCanvas(c2);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-- 
GitLab