~vbursian/research-assistant/intervers

« back to all changes in this revision

Viewing changes to RAGUI/RAMainWindow.cpp

  • Committer: Viktor Bursian
  • Date: 2013-06-06 15:10:08 UTC
  • Revision ID: vbursian@gmail.com-20130606151008-6641eh62f0lgx8jt
Tags: version_0.3.0
versionĀ 0.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
                     Viktor.Bursian@mail.ioffe.ru
10
10
*///////////////////////////////////////////////////////////////////////////////
11
11
#include "Environment.h"
 
12
#include "SymbolsGUI.h"
 
13
#include "StringsAndQStrings.h"
12
14
#include "Net.h"
13
15
#include "NetOps.h"
14
 
#include "GeneralGUI.h"
15
16
#include "ActionSignallingText.h"
 
17
#include "UnitSystemIO.h"
16
18
#include "Helper.h"
17
19
#include "RAMainWindow.h"
18
20
#ifdef RA_CUSTOM_MAIN_FORM
27
29
#include "DlgInspect.h"
28
30
#include "DlgConfigureDevice.h"
29
31
#include "AboutDlg.h"
 
32
#include "Version.h"
 
33
#include "Log.h"
30
34
#include "Trace.h"
31
 
#include "Version.h"
32
35
#include <QtGui>
33
36
namespace RA {
34
37
//------------------------------------------------------------------------------
77
80
  setWindowIcon(QIcon(":/RAGUI/icons/ra.png"));
78
81
 
79
82
  SetMainDataPtrs();
 
83
  UnitSystemLoad(UnitSystem);
80
84
 
81
85
  CreateActions();
82
86
  CreateMenus();
106
110
    event->ignore();
107
111
  }else{
108
112
    StoreDesktop();
 
113
    UnitSystemStore(UnitSystem);
109
114
    event->accept();
110
115
//    delete Helper;
111
116
  };
114
119
 
115
120
void  sRAMainWindow::focusInEvent (QFocusEvent *  event)
116
121
{
117
 
  sString sRAMainWindow_focusInEvent(QString2sString(focusWidget()->objectName()));
 
122
  sString sRAMainWindow_focusInEvent(FromQString(focusWidget()->objectName()));
118
123
  TRACE(sRAMainWindow_focusInEvent);
119
124
  QMainWindow::focusInEvent(event);
120
125
};
132
137
{
133
138
  try{
134
139
    Configuration=sNet::Manager->Root->GetAttr("Configuration");
 
140
    UnitSystem=Configuration->GetAttr("Unit System");
135
141
    sDriver::DeviceList=Configuration->GetAttr("Devices");
136
142
    ImportConfig=Configuration->GetAttr("Import");
137
143
    Desktop=sNet::Manager->Root->GetAttr("Desktop");
219
225
{
220
226
  QDir pluginsDir;
221
227
  pluginsDir = QDir(qApp->applicationDirPath());
 
228
  #ifdef Q_OS_WIN32
 
229
    pluginsDir.setNameFilters( QStringList() << "rap*.dll" );
 
230
  #endif
 
231
  #ifdef Q_OS_UNIX
 
232
    pluginsDir.setNameFilters( QStringList() << "librap*.so" );
 
233
  #endif
222
234
  foreach( QString fileName, pluginsDir.entryList(QDir::Files) ){
223
 
    TRACE( QString2sString(fileName) );
224
235
    QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
225
236
    QObject *plugin = loader.instance();
226
 
    if (plugin) {
 
237
    if( ! plugin ){
 
238
      RANet::Log.Put(sLog::Warning,"Plugins"
 
239
                  ,sString("sRAMainWindow::LoadPlugins: file found: '")
 
240
                  +FromQString(fileName)
 
241
                  +sString("', but cannot be loaded.")
 
242
                  );
 
243
    }else{
227
244
      psDevicePackage  P = qobject_cast<psDevicePackage>(plugin);
228
245
      if( P ){
229
246
        if( sEnvironment::Param("install",false) ){
230
247
          P->InstallDefaults(sDriver::DeviceList);
231
248
        };
 
249
        {
 
250
          QTranslator *             translator = new QTranslator();
 
251
          if( translator->load(QString("..")+QDir::separator()+"locales"
 
252
                              +QDir::separator()
 
253
                              +ToQString(P->Identifier().Tail(1)
 
254
                                              +"_"
 
255
                                              +sEnvironment::Language )) ){
 
256
            qApp->installTranslator(translator);
 
257
          };
 
258
        };
232
259
      };
233
260
      psInstrumentalPackage  IP = qobject_cast<psInstrumentalPackage>(plugin);
234
261
      if( IP ){
235
 
        TRACE( IP->TrueType()->Name() );
236
 
        if( RANet::Version < IP->CoreVersionMin() ){
 
262
        RANet::Log.Put(sLog::Debug,"Plugins"
 
263
            ,sString("sRAMainWindow::LoadPlugins: InstrumentalPackage: ")
 
264
            +IP->TrueType()->Name() );
 
265
        if( RANet::Version.Principal() < IP->CoreVersionMin().Principal() ){
237
266
          QMessageBox::critical(this,tr("Version mismatch")
238
267
              ,tr("Plugin '%1' version %2 is incompatible with the RA core "
239
268
              "program version %3.  Please upgrade RA core to at least version "
240
269
              "%4.  The program will now terminate.")
241
 
              .arg(sString2QString(IP->TrueType()->Name().Tail(1))
242
 
                  ,sString2QString(IP->Version().Text())
243
 
                  ,sString2QString(RANet::Version.PrincipalText())
244
 
                  ,sString2QString(IP->CoreVersionMin().PrincipalText())  )
 
270
              .arg(ToQString(IP->TrueType()->Name().Tail(1))
 
271
                  ,ToQString(IP->Version().Text())
 
272
                  ,ToQString(RANet::Version.Principal().Text())
 
273
                  ,ToQString(IP->CoreVersionMin().Principal().Text())  )
245
274
                               );
246
275
          throw xProgramError("Version mismatch");
247
276
        };
248
 
        if( IP->CoreVersionUsed() < RANet::Version ){
 
277
        if( IP->CoreVersionUsed().Principal() < RANet::Version.Principal() ){
249
278
          QMessageBox::critical(this,tr("Version mismatch")
250
279
              ,tr("Plugin '%1' version %2 is not known to be compatible with "
251
280
              "the RA core program version %3.  Please upgrade the plugin.  "
252
281
              "The program will now terminate.")
253
 
              .arg(sString2QString(IP->TrueType()->Name())
254
 
                  ,sString2QString(IP->Version().Text())
255
 
                  ,sString2QString(RANet::Version.PrincipalText())  )
 
282
              .arg(ToQString(IP->TrueType()->Name())
 
283
                  ,ToQString(IP->Version().Text())
 
284
                  ,ToQString(RANet::Version.Principal().Text())  )
256
285
                               );
257
286
          throw xProgramError("Version mismatch");
258
287
        };
263
292
          QTranslator *             translator = new QTranslator();
264
293
          if( translator->load(QString("..")+QDir::separator()+"locales"
265
294
                              +QDir::separator()
266
 
                              +sString2QString(IP->TrueType()->Name().Tail(1)
 
295
                              +ToQString(IP->TrueType()->Name().Tail(1)
267
296
                                              +"_"
268
297
                                              +sEnvironment::Language )) ){
269
298
            qApp->installTranslator(translator);
271
300
//          QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
272
301
        };
273
302
        psActionSignallingText   Actn = new sActionSignallingText(this);
274
 
        Actn->setText(sString2QString(IP->TrueType()->Name().Tail(1)));
 
303
        Actn->setText(ToQString(IP->TrueType()->Name().Tail(1)));
275
304
        Actn->setStatusTip(IP->UserFriendlyName());
276
 
        Actn->SetDataString(sString2QString(IP->TrueType()->Name().Tail(1))
 
305
        Actn->SetDataString(ToQString(IP->TrueType()->Name().Tail(1))
277
306
                           +QString(" version ")
278
 
                           +sString2QString(IP->Version().Text())
 
307
                           +ToQString(IP->Version().Text())
279
308
                           +QString(".\n\"")
280
309
                           +IP->UserFriendlyName()
281
310
                           +QString("\".\n\n")
501
530
  };
502
531
  MenuSettings = menuBar()->findChild<QMenu *>("MenuSettings");
503
532
  if( MenuSettings ){
504
 
    //! @todo{translation} ŃƒŠ±Ń€Š°Ń‚ŃŒ ŠøŠ»Šø Š“Š¾Š“ŠµŠ»Š°Ń‚ŃŒ: Š²ŠøŠ“ŠøŠ¼Š¾, Š½ŃƒŠ¶Š½Š¾ ŃŠ¾Š·Š“Š°Š²Š°Ń‚ŃŒ
505
 
    //  ŃŠæŠøсŠ¾Šŗ Š“Š¾ŃŃ‚ŃƒŠæŠ½Ń‹Ń… ŃŠ·Ń‹ŠŗŠ¾Š² Šø Š“Š»Ń ŠŗŠ°Š¶Š“Š¾Š³Š¾ ŃŠæŠøсŠ¾Šŗ ŃŠ»Š¾Š²Š°Ń€ŠµŠ¹,
506
 
    //  Š° ŠŗрŠ¾Š¼Šµ Ń‚Š¾Š³Š¾ ŃŠæŠøсŠ¾Šŗ ŠøŠ½ŃŃ‚Š°Š»Š»ŠøрŠ¾Š²Š°Š½Š½Ń‹Ń… Ń‚Ń€Š°Š½ŃŠ»ŃŃ‚Š¾Ń€Š¾Š², Ń‡Ń‚Š¾Š±Ń‹ Šøх ŃƒŠ“Š°Š»ŃŃ‚ŃŒ
 
533
    /*! @todo{UI++} ŠœŠµŠ½ŃŽ Š²Ń‹Š±Š¾Ń€Š° ŃŠ·Ń‹ŠŗŠ°: ŃƒŠ±Ń€Š°Ń‚ŃŒ ŠøŠ»Šø Š“Š¾Š“ŠµŠ»Š°Ń‚ŃŒ; Š²ŠøŠ“ŠøŠ¼Š¾, Š½ŃƒŠ¶Š½Š¾
 
534
    ŃŠ¾Š·Š“Š°Š²Š°Ń‚ŃŒ ŃŠæŠøсŠ¾Šŗ Š“Š¾ŃŃ‚ŃƒŠæŠ½Ń‹Ń… ŃŠ·Ń‹ŠŗŠ¾Š² Šø Š“Š»Ń ŠŗŠ°Š¶Š“Š¾Š³Š¾ ŃŠæŠøсŠ¾Šŗ ŃŠ»Š¾Š²Š°Ń€ŠµŠ¹, Š° ŠŗрŠ¾Š¼Šµ
 
535
    Ń‚Š¾Š³Š¾ ŃŠæŠøсŠ¾Šŗ ŠøŠ½ŃŃ‚Š°Š»Š»ŠøрŠ¾Š²Š°Š½Š½Ń‹Ń… Ń‚Ń€Š°Š½ŃŠ»ŃŃ‚Š¾Ń€Š¾Š², Ń‡Ń‚Š¾Š±Ń‹ Šøх ŃƒŠ“Š°Š»ŃŃ‚ŃŒ */
507
536
//    CreateMenuLanguage();
508
537
    if( MenuLanguage )  MenuSettings->addMenu(MenuLanguage);
509
538
    MenuUser = new QMenu(this);
586
615
      if( bool(*Installed) && bool(*IncludeIntoMenuInstrument) ){
587
616
        psActionSignallingText     Actn = new sActionSignallingText(this);
588
617
        sString                       DeviceId(AF->Name().Text());
589
 
        Actn->setText(sString2QString(DeviceId));
 
618
        Actn->setText(ToQString(DeviceId));
590
619
        MenuInstrument->addAction(Actn);
591
620
        if( /*psDevice  D =*/ sDevice::FindCreatedDevice(DeviceId) ){
592
621
          Actn->setEnabled(false);
609
638
      if( ! bool(*Disabled) && sProtoDriver::IsConsole((sString)(*ClassName)) ){
610
639
        psActionSignallingText     Actn = new sActionSignallingText(this);
611
640
        sString                       DeviceId(AF->Name().Text());
612
 
        Actn->setText(sString2QString(DeviceId));
 
641
        Actn->setText(ToQString(DeviceId));
613
642
        MenuInstrument->addAction(Actn);
614
643
        if( sProtoDriver::IsRunning(DeviceId) ){
615
644
          Actn->setEnabled(false);
630
659
  sNet::Manager->Undo.GroupOpen();
631
660
  Cfg= (Desktop>>"Children").MakeSubcluster();
632
661
  Cfg << attr("Type","Instrument")
633
 
      << attr("Title",QString2sString(Id))
 
662
      << attr("Title",FromQString(Id))
634
663
      << attr("DockArea",int(Qt::TopDockWidgetArea));
635
664
  CreateSubwidget(Cfg);
636
665
  sNet::Manager->Undo.GroupFlush();
643
672
  sNet::Manager->Undo.GroupOpen();
644
673
  Cfg= (Desktop>>"Children").MakeSubcluster();
645
674
  Cfg << attr("Type","Console")
646
 
      << attr("Title",QString2sString(Id))
 
675
      << attr("Title",FromQString(Id))
647
676
      << attr("DockArea",int(Qt::TopDockWidgetArea));
648
677
  CreateSubwidget(Cfg);
649
678
  sNet::Manager->Undo.GroupFlush();
661
690
                              ; ++i                                    ){
662
691
    psActionSignallingText     Actn = new sActionSignallingText(this);
663
692
    sString                       ClassName = i->first;
664
 
    Actn->setText(sString2QString(ClassName));
 
693
    Actn->setText(ToQString(ClassName));
665
694
    MenuInstallNewDevice->addAction(Actn);
666
695
    connect(Actn,SIGNAL(TitleSignal(QString))
667
696
           ,this,SLOT(InstallNewDevice(QString)));
675
704
void sRAMainWindow::InstallNewDevice (QString ClassName)
676
705
{
677
706
  sString                 DeviceId
678
 
                              = sDriver::InstallNew(QString2sString(ClassName));
 
707
                              = sDriver::InstallNew(FromQString(ClassName));
679
708
  sDlgConfigureDevice *    MaintainDeviceDlg
680
709
                              = new sDlgConfigureDevice(DeviceId,this);
681
710
  MaintainDeviceDlg->setAttribute(Qt::WA_DeleteOnClose);
696
725
    if( Disabled.IsCorrect() ){
697
726
      psActionSignallingText     Actn = new sActionSignallingText(this);
698
727
      sString                       DeviceId(AF->Name().Text());
699
 
      Actn->setText(sString2QString(DeviceId));
 
728
      Actn->setText(ToQString(DeviceId));
700
729
      MenuConfigureDevice->addAction(Actn);
701
730
      if( sProtoDriver::IsRunning(DeviceId) ){
702
731
        Actn->setEnabled(false);
715
744
 
716
745
void sRAMainWindow::ConfigureDevice (QString Id)
717
746
{
718
 
  psDlgConfigureDevice       Dlg = new sDlgConfigureDevice(QString2sString(Id)
 
747
  psDlgConfigureDevice       Dlg = new sDlgConfigureDevice(FromQString(Id)
719
748
                                                          ,this);
720
749
  Dlg->setAttribute(Qt::WA_DeleteOnClose);
721
750
  Dlg->exec();
730
759
                                            ->GetAttr("Version");
731
760
  bool                    Done = false;
732
761
  if( LastVerText.IsCorrect() ){
733
 
    sVersion                  LastVersion((sString)(*LastVerText));
734
 
    if( LastVersion < IP->Version() ){
 
762
    sVersion                  LastVersion(sVersion::FromString
 
763
                                                  ( (sString)(*LastVerText) ) );
 
764
    if( LastVersion.Valuable() < IP->Version().Valuable() ){
735
765
      IP->ModifyConfig(LastVersion,List);
736
 
    }else if( IP->Version() < LastVersion ){
 
766
    }else if( IP->Version().Valuable() < LastVersion.Valuable() ){
737
767
      QMessageBox::critical(this,tr("Plugin version downshift")
738
768
          ,tr("Plugin '%1' version %2 may not work with configuration settings "
739
769
              "that seem to be done for plugin version %3. "
740
770
              "The program will now terminate.")
741
 
              .arg(sString2QString(IP->TrueType()->Name().Tail(1))
742
 
                  ,sString2QString(IP->Version().Text())
743
 
                  ,sString2QString(LastVersion.Text())  )
 
771
              .arg(ToQString(IP->TrueType()->Name().Tail(1))
 
772
                  ,ToQString(IP->Version().Text())
 
773
                  ,ToQString(LastVersion.Text())  )
744
774
                               );
745
775
          throw xProgramError("Plugin version downshift");
746
776
    };
750
780
    D.setIcon(QMessageBox::Question);
751
781
    D.setText(tr("New instrumental plugin has been found:")
752
782
             +QString("\n\n")
753
 
             +sString2QString(IP->TrueType()->Name())
 
783
             +ToQString(IP->TrueType()->Name())
754
784
             +QString("\n")
755
785
             +IP->UserFriendlyName()
756
786
             +QString("\n\n")
788
818
  if( Done ){
789
819
    List |= IP->TrueType()->Name();
790
820
    sCluster::sPtr          P = List->GetAttr(IP->TrueType()->Name());
791
 
    P << attr("Version",IP->Version().PrincipalText());
792
 
  };
793
 
  /*
794
 
  Configuration |= "Plugins auto-install";
795
 
  sCluster::sPtr          List = Configuration->GetAttr("Plugins auto-install");
796
 
  sBooleanNode::sPtr      Flag = List->GetAttr(IP->TrueType()->Name());
797
 
  bool                    Ask = true;
798
 
  if( Flag.IsCorrect() )  Ask=(bool)(*Flag);
799
 
  if( Ask ){
800
 
    QMessageBox               D;
801
 
    D.setWindowTitle(tr("New instrumental plugin"));
802
 
    D.setIcon(QMessageBox::Question);
803
 
    D.setText(tr("New instrumental plugin has been found:")
804
 
             +QString("\n\n")
805
 
             +sString2QString(IP->TrueType()->Name())
806
 
             +QString("\n")
807
 
             +IP->UserFriendlyName()
808
 
             +QString("\n\n")
809
 
             +tr("Whould you like to perform a default installation "
810
 
                 "for this plugin?"));
811
 
    D.setDetailedText(tr("The plugin may have a default installation "
812
 
                         "instructions.  These instructions will "
813
 
                         "install one or more devices with default "
814
 
                         "settings.  You will be able to review and "
815
 
                         "change any of these settings, as well as "
816
 
                         "uninstall any device through the "
817
 
                         "Settings menu at any time.  Also, you can "
818
 
                         "install your devices manually one-by-one.\n\n"
819
 
                         "It is recommended, however, to start with "
820
 
                         "the default installation provided with this "
821
 
                         "plugin."));
822
 
    QAbstractButton *  AskBtn;
823
 
    QAbstractButton *  NoBtn;
824
 
    QAbstractButton *  YesBtn;
825
 
    AskBtn=D.addButton(tr("Ask me next time"),QMessageBox::NoRole);
826
 
    NoBtn=D.addButton(tr("No, I will install every device manually")
827
 
                     ,QMessageBox::NoRole);
828
 
    YesBtn=D.addButton(tr("Yes, install default devices")
829
 
                      ,QMessageBox::NoRole);
830
 
    D.exec();
831
 
    if( D.clickedButton() == YesBtn ){
832
 
      IP->InstallDefaults(sDriver::DeviceList);
833
 
      Ask=false;
834
 
    }else if( D.clickedButton() == NoBtn ){
835
 
      Ask=false;
836
 
    };
837
 
    List->SetAttr(bool_attr(IP->TrueType()->Name(),Ask));
838
 
  };
839
 
  */
 
821
    P << attr("Version",IP->Version().Principal().Text());
 
822
  };
840
823
};
841
824
 
842
825
 
874
857
  statusBar()
875
858
      ->setStyleSheet("QLabel {background: white; border: 1px solid grey}");
876
859
  CursorStatusX = new QLabel(this);
 
860
  CursorStatusY = new QLabel(this);
877
861
  CursorStatusDX = new QLabel(this);
878
 
  CursorStatusY = new QLabel(this);
879
862
  CursorStatusDY = new QLabel(this);
880
863
  CursorStatusX->setVisible(false);
 
864
  CursorStatusY->setVisible(false);
881
865
  CursorStatusDX->setVisible(false);
882
 
  CursorStatusY->setVisible(false);
883
866
  CursorStatusDY->setVisible(false);
 
867
  CursorStatusDX->setStyleSheet("color: navy");
 
868
  CursorStatusDY->setStyleSheet("color: navy");
884
869
  statusBar()->addPermanentWidget(CursorStatusX);
 
870
  statusBar()->addPermanentWidget(CursorStatusY);
885
871
  statusBar()->addPermanentWidget(CursorStatusDX);
886
 
  statusBar()->addPermanentWidget(CursorStatusY);
887
872
  statusBar()->addPermanentWidget(CursorStatusDY);
888
873
};
889
874
 
890
875
 
891
 
void  sRAMainWindow::ShowCursorInfo (QString  X
892
 
                                    ,QString  DX
893
 
                                    ,QString  Y
894
 
                                    ,QString  DY)
 
876
void  sRAMainWindow::ShowCursorInfo (sPhysPair  position
 
877
                                    ,sPhysPair  reference
 
878
                                    ,sString    x_title
 
879
                                    ,sString    y_title)
895
880
{
896
 
  CursorStatusX->setText(X);
897
 
  CursorStatusDX->setText(DX);
898
 
  CursorStatusY->setText(Y);
899
 
  CursorStatusDY->setText(DY);
 
881
  sPhysPair                   Difference(position);
 
882
  bool                        OK = true;
 
883
  if( x_title.Empty() ){
 
884
    CursorStatusX->setText(ToQString( position.X.Text(HTML,Laconic) ));
 
885
  }else{
 
886
    CursorStatusX->setText(ToQString( sString("<i>") + x_title + "</i>="
 
887
                                    + position.X.Text(HTML,Laconic)));
 
888
  };
 
889
  if( y_title.Empty() ){
 
890
    CursorStatusY->setText(ToQString( position.Y.Text(HTML,Laconic) ));
 
891
  }else{
 
892
    CursorStatusY->setText(ToQString( sString("<i>") + y_title + "</i>="
 
893
                                    + position.Y.Text(HTML,Laconic) ));
 
894
  };
900
895
  if( ! CursorStatusX->isVisible() )  CursorStatusX->setVisible(true);
901
 
  if( ! CursorStatusDX->isVisible() )  CursorStatusDX->setVisible(true);
902
896
  if( ! CursorStatusY->isVisible() )  CursorStatusY->setVisible(true);
903
 
  if( ! CursorStatusDY->isVisible() )  CursorStatusDY->setVisible(true);
 
897
  try{
 
898
    Difference = position - reference;
 
899
    if( x_title.Empty() ){
 
900
      CursorStatusDX->setText(ToQString( sString(Symbol::DeltaCapital) + "="
 
901
                                       + Difference.X.Text(HTML,Laconic) ));
 
902
    }else{
 
903
      CursorStatusDX->setText(ToQString(
 
904
          sString(Symbol::DeltaCapital) + "<sub><i>" + x_title + "</i></sub>="
 
905
          + Difference.X.Text(HTML,Laconic)
 
906
          ));
 
907
    };
 
908
    if( y_title.Empty() ){
 
909
      CursorStatusDY->setText(ToQString( sString(Symbol::DeltaCapital) + "="
 
910
                                       + Difference.Y.Text(HTML,Laconic) ));
 
911
    }else{
 
912
      CursorStatusDY->setText(ToQString(
 
913
          sString(Symbol::DeltaCapital) + "<sub><i>" + y_title + "</i></sub>="
 
914
          + Difference.Y.Text(HTML,Laconic)
 
915
          ));
 
916
    };
 
917
  }catch(rxRAlgebra){
 
918
    OK = false;
 
919
  };
 
920
  if( CursorStatusDX->isVisible() != OK )  CursorStatusDX->setVisible(OK);
 
921
  if( CursorStatusDY->isVisible() != OK )  CursorStatusDY->setVisible(OK);
904
922
};
905
923
 
906
924
 
1038
1056
void sRAMainWindow::NewWorkbook ()
1039
1057
{
1040
1058
  sNodePtr                    Cfg;
1041
 
  sNodePtr                    Content( new sEasyCluster ); //! @todo new sTopic?
 
1059
  sNodePtr                    Content( new sEasyCluster );
 
1060
                              //! @todo{UI++} new sTopic?
1042
1061
  sNet::Manager->Undo.GroupOpen();
1043
1062
  Cfg= (Desktop>>"Children").MakeSubcluster();
1044
1063
  Cfg << attr("Type","Workbook")
1052
1071
void sRAMainWindow::NewPlot ()
1053
1072
{
1054
1073
  sNodePtr                    Cfg;
1055
 
  sNodePtr                    Content( new sEasyCluster ); //! @todo new sPicture?
 
1074
  sNodePtr                    Content( new sEasyCluster );
 
1075
                              //! @todo{UI++} new sPicture?
1056
1076
  sNet::Manager->Undo.GroupOpen();
1057
1077
  Cfg= (Desktop>>"Children").MakeSubcluster();
1058
1078
  Cfg << attr("Type","Plot")
1089
1109
  sNet::Manager->Undo.GroupOpen();
1090
1110
  Cfg= (Desktop>>"Children").MakeSubcluster();
1091
1111
  Cfg << attr("Type","Workbook")
1092
 
      << attr("Title","Data")
 
1112
      << attr("Title",FromQString(tr("Data")))
1093
1113
      << attr("Content" ,Data)
1094
1114
      << attr("DockArea",int(Qt::LeftDockWidgetArea));
1095
1115
  CreateSubwidget(Cfg);
1103
1123
  sNet::Manager->Undo.GroupOpen();
1104
1124
  Cfg= (Desktop>>"Children").MakeSubcluster();
1105
1125
  Cfg << attr("Type","Workbook")
1106
 
      << attr("Title","Records")
 
1126
      << attr("Title",FromQString(tr("Records")))
1107
1127
      << attr("Content" ,Records)
1108
1128
      << attr("DockArea",int(Qt::LeftDockWidgetArea));
1109
1129
  CreateSubwidget(Cfg);
1117
1137
  sNet::Manager->Undo.GroupOpen();
1118
1138
  Cfg= (Desktop>>"Children").MakeSubcluster();
1119
1139
  Cfg << attr("Type","Workbook")
1120
 
      << attr("Title","Samples")
 
1140
      << attr("Title",FromQString(tr("Samples")))
1121
1141
      << attr("Content" ,Samples)
1122
1142
      << attr("DockArea",int(Qt::LeftDockWidgetArea));
1123
1143
  CreateSubwidget(Cfg);
1131
1151
  sNet::Manager->Undo.GroupOpen();
1132
1152
  Cfg= (Desktop>>"Children").MakeSubcluster();
1133
1153
  Cfg << attr("Type","Workbook")
1134
 
      << attr("Title","Topics")
 
1154
      << attr("Title",FromQString(tr("Topics")))
1135
1155
      << attr("Content" ,Topics)
1136
1156
      << attr("DockArea",int(Qt::LeftDockWidgetArea));
1137
1157
  CreateSubwidget(Cfg);
1213
1233
 
1214
1234
void  sRAMainWindow::Retranslate ()
1215
1235
{
1216
 
  TRACE("Retranslate");
1217
 
  TRACE(QString2sString(locale().name()));
 
1236
//  TRACE("Retranslate");
 
1237
//  TRACE(FromQString(locale().name()));
1218
1238
  setWindowTitle(tr("Research Assistant"));
1219
1239
//  ActnNewWorkbook->setText(tr("New work&book"));
1220
1240
//  ActnNewWorkbook->setStatusTip(tr("Open a new empty workbook"));