Changeset 63999ec


Ignore:
Timestamp:
06/01/15 11:09:26 (2 months ago)
Author:
Ken Moore <ken@…>
Branches:
master
Children:
17ef66a7, e6a45e6
Parents:
2eec7eb
Message:

Add support for excluded datasets from either snapshotting or replication routines into the life preserver.

Location:
src-qt5/life-preserver/lp-gui
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src-qt5/life-preserver/lp-gui/LPBackend.cpp

    r277c9a4e r63999ec  
    22#include <QInputDialog> 
    33#include <QObject> 
     4#include <pcbsd-utils.h> 
    45 
    56// ============== 
     
    1819    
    1920  return list;   
     21} 
     22 
     23QStringList LPBackend::listPoolDatasets(QString pool){ 
     24  QString cmd = "zfs list -H -o name"; 
     25  QStringList out = LPBackend::getCmdOutput(cmd).filter(pool); 
     26  //qDebug() << "out - " << out; 
     27  //Now process the output (one dataset per line - no headers) 
     28  QStringList list; 
     29  for(int i=0; i<out.length(); i++){ 
     30    if(out[i].startsWith(pool+"/") && !out[i].contains("/ROOT/") ){ list << out[i].simplified(); } 
     31  } 
     32  //qDebug() << "list - " << list; 
     33  list.removeDuplicates(); 
     34   
     35  return list;           
    2036} 
    2137 
     
    182198  //qDebug() << "lpreserver cronsnap:\n" << out << QString::number(time) << QString::number(numToKeep); 
    183199    
     200  return ok; 
     201} 
     202 
     203QStringList LPBackend::getDatasetExcludes(QString pool, QString type){ 
     204  //type=[snap,rep] 
     205  type = type.toLower(); 
     206  if(type !="snap" && type != "rep"){ return QStringList(); }// error in the type 
     207  QString filename = "/var/db/lpreserver/excludes/"+pool+"-"+type; 
     208  QStringList list = pcbsd::Utils::readTextFile(filename).split("\n");; 
     209  list.removeAll(""); //remove any empty lines 
     210  return list; 
     211} 
     212 
     213bool LPBackend::setDatasetExcludes(QString pool, QString type, QStringList list){ 
     214  //type=[snap,rep]      
     215  type = type.toLower(); 
     216  if(type !="snap" && type != "rep"){ return false; }// error in the type 
     217  QString filename = "/var/db/lpreserver/excludes/"+pool+"-"+type; 
     218  bool ok = pcbsd::Utils::writeTextFile(filename, list.join("\n"), true); //overwrite this file 
    184219  return ok; 
    185220} 
  • src-qt5/life-preserver/lp-gui/LPBackend.h

    r50625d0 r63999ec  
    1818        //Informational 
    1919        static QStringList listPossibleDatasets(); //list all possible datasets on the system 
     20        static QStringList listPoolDatasets(QString pool); //list all subsets of the zpool 
    2021        static QStringList listDatasets(); //list all current lifepreserver datasets 
    2122        static QStringList listDatasetSubsets(QString dataset); //list all subsets of the main dataset 
     
    2930        static bool removeDataset(QString dataset); 
    3031        static bool datasetInfo(QString dataset, int& time, int& numToKeep); //get current settings for a dataset 
     32        static QStringList getDatasetExcludes(QString pool, QString type); //type=[snap,rep] 
     33        static bool setDatasetExcludes(QString pool, QString type, QStringList list); //type=[snap/rep] 
    3134        //Snapshop Management 
    3235        static void newSnapshot(QString dataset, QString snapshotname, QString snapshotcomment = ""); 
  • src-qt5/life-preserver/lp-gui/LPConfig.cpp

    r1161a87 r63999ec  
    1818  remoteChanged = false; 
    1919  cRepHost = -1; //internal flag 
     20   
     21  //init the menus 
     22  snapExMenu = new QMenu(this); 
     23    ui->tool_snap_addexclude->setMenu(snapExMenu); 
     24  repExMenu = new QMenu(this); 
     25    ui->tool_rep_addexclude->setMenu(repExMenu); 
    2026  //Variables that will be changed when loading the dataset properties 
    21          
     27 
     28   
    2229  //now connect the buttons 
    2330  connect(ui->tool_apply,SIGNAL(clicked()), this,SLOT(slotApplyChanges()) ); 
     
    2936  connect(ui->tool_rep_addhost, SIGNAL(clicked()), this, SLOT(AddRepHost()) ); 
    3037  connect(ui->tool_rep_addiscsi, SIGNAL(clicked()), this, SLOT(AddRepISCSI()) ); 
     38  connect(snapExMenu, SIGNAL(triggered(QAction*)), this, SLOT(addSnapExclude(QAction*)) ); 
     39  connect(repExMenu, SIGNAL(triggered(QAction*)), this, SLOT(addRepExclude(QAction*)) ); 
     40  connect(ui->tool_snap_remexclude, SIGNAL(clicked()), this, SLOT(rmSnapExcludes()) ); 
    3141} 
    3242 
     
    4555void LPConfig::loadDatasetConfiguration(QString dataset, bool replicated, bool scrubsched){ 
    4656  qDebug() <<" - Loading dataset configuration:" << dataset << replicated << scrubsched; 
     57  QStringList subsets = LPBackend::listPoolDatasets(dataset); 
     58  //qDebug() << "Subsets:" << dataset << subsets; 
     59  snapExMenu->clear(); 
     60  repExMenu->clear(); 
     61  for(int i=0; i<subsets.length(); i++){ 
     62    snapExMenu->addAction(subsets[i]); 
     63    repExMenu->addAction(subsets[i]); 
     64  } 
     65         
    4766  //Load the dataset values 
    4867  isReplicated = replicated; 
     
    87106  } 
    88107  setLocalKeepNumber(); 
    89  
     108  snapExcludes = LPBackend::getDatasetExcludes(dataset, "snap"); 
     109  ui->list_snap_excludes->clear(); 
     110  ui->list_snap_excludes->addItems(snapExcludes); 
     111   
    90112  // - Scrub settings 
    91113  ui->groupScrub->setChecked(isScrubSched); 
     
    106128  } 
    107129  ui->time_scrub->setTime( QTime(scrubTime, 0) ); 
     130 
    108131   
    109132  // - Replication settings 
     
    114137    origHosts << remoteHosts[i].host(); //save this for comparison later 
    115138  } 
    116  
     139  repExcludes = LPBackend::getDatasetExcludes(dataset, "rep"); 
     140  ui->list_rep_excludes->clear(); 
     141  ui->list_rep_excludes->addItems(repExcludes); 
     142   
    117143  //Now update the visibility of items appropriately 
    118144  on_combo_local_schedule_currentIndexChanged(ui->combo_local_schedule->currentIndex()); 
     
    200226  } 
    201227  newHosts.removeDuplicates(); 
     228   
     229  //Now apply any changes to the exclude lists 
     230  QStringList tmp; 
     231  for(int i=0; i<ui->list_snap_excludes->count(); i++){ 
     232    tmp << ui->list_snap_excludes->item(i)->text(); 
     233  } 
     234  if(tmp!=snapExcludes){ LPBackend::setDatasetExcludes(ui->label_dataset->text(), "snap", tmp); } 
     235  tmp.clear(); 
     236  for(int i=0; i<ui->list_rep_excludes->count(); i++){ 
     237    tmp << ui->list_rep_excludes->item(i)->text(); 
     238  } 
     239  if(tmp!=repExcludes){ LPBackend::setDatasetExcludes(ui->label_dataset->text(), "rep", tmp); } 
    202240   
    203241  /*for(int i=0; i<newHosts.length(); i++){ 
     
    445483} 
    446484 
     485void LPConfig::addRepExclude(QAction *act){ 
     486  if(ui->list_rep_excludes->findItems(act->text(), Qt::MatchExactly).isEmpty()){ 
     487    ui->list_rep_excludes->addItem(act->text());         
     488  }   
     489} 
     490 
     491void LPConfig::rmRepExcludes(){ 
     492  QList<QListWidgetItem*> sel = ui->list_rep_excludes->selectedItems(); 
     493  for(int i=0; i<sel.length(); i++){ delete sel[i]; }    
     494} 
     495 
     496void LPConfig::addSnapExclude(QAction *act){ 
     497  if(ui->list_snap_excludes->findItems(act->text(), Qt::MatchExactly).isEmpty()){ 
     498    ui->list_snap_excludes->addItem(act->text());        
     499  } 
     500} 
     501 
     502void LPConfig::rmSnapExcludes(){ 
     503  QList<QListWidgetItem*> sel = ui->list_snap_excludes->selectedItems(); 
     504  for(int i=0; i<sel.length(); i++){ delete sel[i]; } 
     505} 
     506 
  • src-qt5/life-preserver/lp-gui/LPConfig.h

    r1161a87 r63999ec  
    77#include <QMessageBox> 
    88#include <QInputDialog> 
    9  
     9#include <QMenu> 
    1010#include "LPBackend.h" 
    1111#include "LPGUtils.h" 
     
    3333private: 
    3434        Ui::LPConfig *ui; 
     35 
     36        QMenu *snapExMenu, *repExMenu; 
     37        QStringList snapExcludes, repExcludes; 
    3538        void loadDatasetConfiguration(QString, bool, bool); 
    3639        void checkForChanges(); 
     
    5154        void AddRepISCSI(); 
    5255        void RemRepHost(); 
     56 
     57        void addRepExclude(QAction*); 
     58        void rmRepExcludes(); 
     59        void addSnapExclude(QAction*); 
     60        void rmSnapExcludes(); 
     61 
    5362}; 
    5463 
  • src-qt5/life-preserver/lp-gui/LPConfig.ui

    r8e27bfd r63999ec  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>351</width> 
    10     <height>347</height> 
     9    <width>350</width> 
     10    <height>390</height> 
    1111   </rect> 
    1212  </property> 
     
    6868         <property name="text"> 
    6969          <string>Schedule:</string> 
    70          </property> 
    71         </widget> 
    72        </item> 
    73        <item row="1" column="0"> 
    74         <widget class="QLabel" name="label_local_keep"> 
    75          <property name="font"> 
    76           <font> 
    77            <weight>75</weight> 
    78            <bold>true</bold> 
    79           </font> 
    80          </property> 
    81          <property name="text"> 
    82           <string>Keep:</string> 
    8370         </property> 
    8471        </widget> 
     
    146133        </layout> 
    147134       </item> 
     135       <item row="1" column="0"> 
     136        <widget class="QLabel" name="label_local_keep"> 
     137         <property name="font"> 
     138          <font> 
     139           <weight>75</weight> 
     140           <bold>true</bold> 
     141          </font> 
     142         </property> 
     143         <property name="text"> 
     144          <string>Keep:</string> 
     145         </property> 
     146        </widget> 
     147       </item> 
    148148       <item row="1" column="1"> 
    149149        <layout class="QHBoxLayout" name="horizontalLayout_3"> 
     
    174174        </layout> 
    175175       </item> 
     176       <item row="2" column="0"> 
     177        <widget class="QLabel" name="label_7"> 
     178         <property name="font"> 
     179          <font> 
     180           <weight>75</weight> 
     181           <bold>true</bold> 
     182          </font> 
     183         </property> 
     184         <property name="text"> 
     185          <string>Excluded:</string> 
     186         </property> 
     187        </widget> 
     188       </item> 
     189       <item row="2" column="1"> 
     190        <layout class="QVBoxLayout" name="verticalLayout_5"> 
     191         <property name="spacing"> 
     192          <number>3</number> 
     193         </property> 
     194         <item> 
     195          <widget class="QListWidget" name="list_snap_excludes"> 
     196           <property name="selectionMode"> 
     197            <enum>QAbstractItemView::ExtendedSelection</enum> 
     198           </property> 
     199           <property name="selectionBehavior"> 
     200            <enum>QAbstractItemView::SelectRows</enum> 
     201           </property> 
     202           <property name="sortingEnabled"> 
     203            <bool>true</bool> 
     204           </property> 
     205          </widget> 
     206         </item> 
     207         <item> 
     208          <layout class="QHBoxLayout" name="horizontalLayout_8"> 
     209           <item> 
     210            <widget class="QToolButton" name="tool_snap_addexclude"> 
     211             <property name="text"> 
     212              <string notr="true"/> 
     213             </property> 
     214             <property name="icon"> 
     215              <iconset resource="lPreserve.qrc"> 
     216               <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
     217             </property> 
     218             <property name="popupMode"> 
     219              <enum>QToolButton::InstantPopup</enum> 
     220             </property> 
     221            </widget> 
     222           </item> 
     223           <item> 
     224            <widget class="QToolButton" name="tool_snap_remexclude"> 
     225             <property name="text"> 
     226              <string notr="true"/> 
     227             </property> 
     228             <property name="icon"> 
     229              <iconset resource="lPreserve.qrc"> 
     230               <normaloff>:/images/list-remove.png</normaloff>:/images/list-remove.png</iconset> 
     231             </property> 
     232             <property name="autoRaise"> 
     233              <bool>false</bool> 
     234             </property> 
     235            </widget> 
     236           </item> 
     237          </layout> 
     238         </item> 
     239        </layout> 
     240       </item> 
    176241      </layout> 
    177242     </widget> 
     
    181246      </attribute> 
    182247      <layout class="QVBoxLayout" name="verticalLayout_2"> 
     248       <property name="leftMargin"> 
     249        <number>0</number> 
     250       </property> 
     251       <property name="topMargin"> 
     252        <number>0</number> 
     253       </property> 
     254       <property name="rightMargin"> 
     255        <number>0</number> 
     256       </property> 
     257       <property name="bottomMargin"> 
     258        <number>0</number> 
     259       </property> 
    183260       <item> 
    184         <layout class="QHBoxLayout" name="horizontalLayout_13"> 
    185          <item> 
    186           <widget class="QComboBox" name="combo_rep_hosts"/> 
    187          </item> 
    188          <item> 
    189           <widget class="QToolButton" name="tool_rep_addhost"> 
    190            <property name="text"> 
    191             <string>SSH</string> 
    192            </property> 
    193            <property name="icon"> 
    194             <iconset resource="lPreserve.qrc"> 
    195              <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
    196            </property> 
    197            <property name="toolButtonStyle"> 
    198             <enum>Qt::ToolButtonTextBesideIcon</enum> 
    199            </property> 
    200           </widget> 
    201          </item> 
    202          <item> 
    203           <widget class="QToolButton" name="tool_rep_addiscsi"> 
    204            <property name="text"> 
    205             <string>ISCSI</string> 
    206            </property> 
    207            <property name="icon"> 
    208             <iconset resource="lPreserve.qrc"> 
    209              <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
    210            </property> 
    211            <property name="toolButtonStyle"> 
    212             <enum>Qt::ToolButtonTextBesideIcon</enum> 
    213            </property> 
    214           </widget> 
    215          </item> 
    216          <item> 
    217           <widget class="QToolButton" name="tool_rep_remhost"> 
    218            <property name="text"> 
    219             <string notr="true"/> 
    220            </property> 
    221            <property name="icon"> 
    222             <iconset resource="lPreserve.qrc"> 
    223              <normaloff>:/images/list-remove.png</normaloff>:/images/list-remove.png</iconset> 
    224            </property> 
    225            <property name="toolButtonStyle"> 
    226             <enum>Qt::ToolButtonIconOnly</enum> 
    227            </property> 
    228           </widget> 
    229          </item> 
    230         </layout> 
    231        </item> 
    232        <item> 
    233         <widget class="QGroupBox" name="groupReplicate"> 
    234          <property name="title"> 
    235           <string>Replication Settings</string> 
    236          </property> 
    237          <property name="checkable"> 
    238           <bool>false</bool> 
    239          </property> 
    240          <property name="checked"> 
    241           <bool>false</bool> 
    242          </property> 
    243          <layout class="QVBoxLayout" name="verticalLayout_3"> 
    244           <item> 
    245            <layout class="QHBoxLayout" name="horizontalLayout_7"> 
    246             <item> 
    247              <widget class="QLabel" name="label_10"> 
    248               <property name="text"> 
    249                <string>User Name</string> 
    250               </property> 
    251              </widget> 
    252             </item> 
    253             <item> 
    254              <widget class="QLineEdit" name="lineUserName"/> 
    255             </item> 
    256            </layout> 
    257           </item> 
    258           <item> 
    259            <layout class="QHBoxLayout" name="horizontalLayout_4"> 
    260             <item> 
    261              <widget class="QLabel" name="label_5"> 
    262               <property name="sizePolicy"> 
    263                <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> 
    264                 <horstretch>0</horstretch> 
    265                 <verstretch>0</verstretch> 
    266                </sizepolicy> 
    267               </property> 
    268               <property name="text"> 
    269                <string>SSH Port</string> 
    270               </property> 
    271              </widget> 
    272             </item> 
    273             <item> 
    274              <spacer name="horizontalSpacer_2"> 
    275               <property name="orientation"> 
    276                <enum>Qt::Horizontal</enum> 
    277               </property> 
    278               <property name="sizeType"> 
    279                <enum>QSizePolicy::Fixed</enum> 
    280               </property> 
    281               <property name="sizeHint" stdset="0"> 
    282                <size> 
    283                 <width>40</width> 
    284                 <height>20</height> 
    285                </size> 
    286               </property> 
    287              </spacer> 
    288             </item> 
    289             <item> 
    290              <widget class="QSpinBox" name="spinPort"> 
    291               <property name="maximum"> 
    292                <number>999999</number> 
    293               </property> 
    294               <property name="value"> 
    295                <number>22</number> 
    296               </property> 
    297              </widget> 
    298             </item> 
    299             <item> 
    300              <spacer name="horizontalSpacer_3"> 
    301               <property name="orientation"> 
    302                <enum>Qt::Horizontal</enum> 
    303               </property> 
    304               <property name="sizeHint" stdset="0"> 
    305                <size> 
    306                 <width>40</width> 
    307                 <height>20</height> 
    308                </size> 
    309               </property> 
    310              </spacer> 
    311             </item> 
    312            </layout> 
    313           </item> 
    314           <item> 
    315            <layout class="QHBoxLayout" name="horizontalLayout_5"> 
    316             <item> 
    317              <widget class="QLabel" name="label_14"> 
    318               <property name="text"> 
    319                <string>Remote Dataset</string> 
    320               </property> 
    321              </widget> 
    322             </item> 
    323             <item> 
    324              <widget class="QLineEdit" name="lineRemoteDataset"/> 
    325             </item> 
    326            </layout> 
    327           </item> 
    328           <item> 
    329            <widget class="QGroupBox" name="groupBox"> 
    330             <property name="title"> 
    331              <string>Frequency</string> 
    332             </property> 
    333             <property name="alignment"> 
    334              <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
    335             </property> 
    336             <layout class="QGridLayout" name="gridLayout_3"> 
    337              <property name="leftMargin"> 
    338               <number>2</number> 
    339              </property> 
    340              <property name="topMargin"> 
    341               <number>2</number> 
    342              </property> 
    343              <property name="rightMargin"> 
    344               <number>2</number> 
    345              </property> 
    346              <property name="bottomMargin"> 
    347               <number>2</number> 
    348              </property> 
    349              <item row="0" column="0"> 
    350               <layout class="QHBoxLayout" name="horizontalLayout_6"> 
    351                <item> 
    352                 <widget class="QComboBox" name="combo_remote_schedule"> 
    353                  <property name="sizePolicy"> 
    354                   <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> 
    355                    <horstretch>0</horstretch> 
    356                    <verstretch>0</verstretch> 
    357                   </sizepolicy> 
    358                  </property> 
    359                  <property name="sizeAdjustPolicy"> 
    360                   <enum>QComboBox::AdjustToContents</enum> 
    361                  </property> 
    362                  <item> 
    363                   <property name="text"> 
    364                    <string>Sync with snapshots</string> 
    365                   </property> 
    366                  </item> 
    367                  <item> 
    368                   <property name="text"> 
    369                    <string>Daily</string> 
    370                   </property> 
    371                  </item> 
    372                  <item> 
    373                   <property name="text"> 
    374                    <string>Hourly</string> 
    375                   </property> 
    376                  </item> 
    377                  <item> 
    378                   <property name="text"> 
    379                    <string>30 Minutes</string> 
    380                   </property> 
    381                  </item> 
    382                  <item> 
    383                   <property name="text"> 
    384                    <string>10 Minutes</string> 
    385                   </property> 
    386                  </item> 
    387                  <item> 
    388                   <property name="text"> 
    389                    <string>Manual</string> 
    390                   </property> 
    391                  </item> 
    392                 </widget> 
    393                </item> 
    394                <item> 
    395                 <widget class="QTimeEdit" name="time_replicate"> 
    396                  <property name="displayFormat"> 
    397                   <string>@ h AP</string> 
    398                  </property> 
    399                 </widget> 
    400                </item> 
    401                <item> 
    402                 <spacer name="horizontalSpacer_6"> 
    403                  <property name="orientation"> 
    404                   <enum>Qt::Horizontal</enum> 
    405                  </property> 
    406                  <property name="sizeType"> 
    407                   <enum>QSizePolicy::Preferred</enum> 
    408                  </property> 
    409                  <property name="sizeHint" stdset="0"> 
    410                   <size> 
    411                    <width>20</width> 
    412                    <height>20</height> 
    413                   </size> 
    414                  </property> 
    415                 </spacer> 
    416                </item> 
    417               </layout> 
     261        <widget class="QTabWidget" name="tabWidget_2"> 
     262         <property name="font"> 
     263          <font> 
     264           <weight>50</weight> 
     265           <bold>false</bold> 
     266          </font> 
     267         </property> 
     268         <property name="currentIndex"> 
     269          <number>0</number> 
     270         </property> 
     271         <widget class="QWidget" name="tab"> 
     272          <attribute name="title"> 
     273           <string>Remote Servers</string> 
     274          </attribute> 
     275          <layout class="QVBoxLayout" name="verticalLayout_6"> 
     276           <item> 
     277            <layout class="QHBoxLayout" name="horizontalLayout_13"> 
     278             <item> 
     279              <widget class="QComboBox" name="combo_rep_hosts"/> 
     280             </item> 
     281             <item> 
     282              <widget class="QToolButton" name="tool_rep_addhost"> 
     283               <property name="text"> 
     284                <string>SSH</string> 
     285               </property> 
     286               <property name="icon"> 
     287                <iconset resource="lPreserve.qrc"> 
     288                 <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
     289               </property> 
     290               <property name="toolButtonStyle"> 
     291                <enum>Qt::ToolButtonTextBesideIcon</enum> 
     292               </property> 
     293              </widget> 
     294             </item> 
     295             <item> 
     296              <widget class="QToolButton" name="tool_rep_addiscsi"> 
     297               <property name="text"> 
     298                <string>ISCSI</string> 
     299               </property> 
     300               <property name="icon"> 
     301                <iconset resource="lPreserve.qrc"> 
     302                 <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
     303               </property> 
     304               <property name="toolButtonStyle"> 
     305                <enum>Qt::ToolButtonTextBesideIcon</enum> 
     306               </property> 
     307              </widget> 
     308             </item> 
     309             <item> 
     310              <widget class="QToolButton" name="tool_rep_remhost"> 
     311               <property name="text"> 
     312                <string notr="true"/> 
     313               </property> 
     314               <property name="icon"> 
     315                <iconset resource="lPreserve.qrc"> 
     316                 <normaloff>:/images/list-remove.png</normaloff>:/images/list-remove.png</iconset> 
     317               </property> 
     318               <property name="toolButtonStyle"> 
     319                <enum>Qt::ToolButtonIconOnly</enum> 
     320               </property> 
     321              </widget> 
    418322             </item> 
    419323            </layout> 
    420            </widget> 
    421           </item> 
    422           <item> 
    423            <spacer name="verticalSpacer"> 
    424             <property name="orientation"> 
    425              <enum>Qt::Vertical</enum> 
    426             </property> 
    427             <property name="sizeHint" stdset="0"> 
    428              <size> 
    429               <width>20</width> 
    430               <height>40</height> 
    431              </size> 
    432             </property> 
    433            </spacer> 
    434           </item> 
    435          </layout> 
     324           </item> 
     325           <item> 
     326            <widget class="QGroupBox" name="groupReplicate"> 
     327             <property name="title"> 
     328              <string>Replication Settings</string> 
     329             </property> 
     330             <property name="checkable"> 
     331              <bool>false</bool> 
     332             </property> 
     333             <property name="checked"> 
     334              <bool>false</bool> 
     335             </property> 
     336             <layout class="QVBoxLayout" name="verticalLayout_3"> 
     337              <item> 
     338               <layout class="QHBoxLayout" name="horizontalLayout_7"> 
     339                <item> 
     340                 <widget class="QLabel" name="label_10"> 
     341                  <property name="text"> 
     342                   <string>User Name</string> 
     343                  </property> 
     344                 </widget> 
     345                </item> 
     346                <item> 
     347                 <widget class="QLineEdit" name="lineUserName"/> 
     348                </item> 
     349               </layout> 
     350              </item> 
     351              <item> 
     352               <layout class="QHBoxLayout" name="horizontalLayout_4"> 
     353                <item> 
     354                 <widget class="QLabel" name="label_5"> 
     355                  <property name="sizePolicy"> 
     356                   <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> 
     357                    <horstretch>0</horstretch> 
     358                    <verstretch>0</verstretch> 
     359                   </sizepolicy> 
     360                  </property> 
     361                  <property name="text"> 
     362                   <string>SSH Port</string> 
     363                  </property> 
     364                 </widget> 
     365                </item> 
     366                <item> 
     367                 <spacer name="horizontalSpacer_2"> 
     368                  <property name="orientation"> 
     369                   <enum>Qt::Horizontal</enum> 
     370                  </property> 
     371                  <property name="sizeType"> 
     372                   <enum>QSizePolicy::Fixed</enum> 
     373                  </property> 
     374                  <property name="sizeHint" stdset="0"> 
     375                   <size> 
     376                    <width>40</width> 
     377                    <height>20</height> 
     378                   </size> 
     379                  </property> 
     380                 </spacer> 
     381                </item> 
     382                <item> 
     383                 <widget class="QSpinBox" name="spinPort"> 
     384                  <property name="maximum"> 
     385                   <number>999999</number> 
     386                  </property> 
     387                  <property name="value"> 
     388                   <number>22</number> 
     389                  </property> 
     390                 </widget> 
     391                </item> 
     392                <item> 
     393                 <spacer name="horizontalSpacer_3"> 
     394                  <property name="orientation"> 
     395                   <enum>Qt::Horizontal</enum> 
     396                  </property> 
     397                  <property name="sizeHint" stdset="0"> 
     398                   <size> 
     399                    <width>40</width> 
     400                    <height>20</height> 
     401                   </size> 
     402                  </property> 
     403                 </spacer> 
     404                </item> 
     405               </layout> 
     406              </item> 
     407              <item> 
     408               <layout class="QHBoxLayout" name="horizontalLayout_5"> 
     409                <item> 
     410                 <widget class="QLabel" name="label_14"> 
     411                  <property name="text"> 
     412                   <string>Remote Dataset</string> 
     413                  </property> 
     414                 </widget> 
     415                </item> 
     416                <item> 
     417                 <widget class="QLineEdit" name="lineRemoteDataset"/> 
     418                </item> 
     419               </layout> 
     420              </item> 
     421              <item> 
     422               <widget class="QGroupBox" name="groupBox"> 
     423                <property name="title"> 
     424                 <string>Frequency</string> 
     425                </property> 
     426                <property name="alignment"> 
     427                 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     428                </property> 
     429                <layout class="QGridLayout" name="gridLayout_3"> 
     430                 <property name="leftMargin"> 
     431                  <number>2</number> 
     432                 </property> 
     433                 <property name="topMargin"> 
     434                  <number>2</number> 
     435                 </property> 
     436                 <property name="rightMargin"> 
     437                  <number>2</number> 
     438                 </property> 
     439                 <property name="bottomMargin"> 
     440                  <number>2</number> 
     441                 </property> 
     442                 <item row="0" column="0"> 
     443                  <layout class="QHBoxLayout" name="horizontalLayout_6"> 
     444                   <item> 
     445                    <widget class="QComboBox" name="combo_remote_schedule"> 
     446                     <property name="sizePolicy"> 
     447                      <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> 
     448                       <horstretch>0</horstretch> 
     449                       <verstretch>0</verstretch> 
     450                      </sizepolicy> 
     451                     </property> 
     452                     <property name="sizeAdjustPolicy"> 
     453                      <enum>QComboBox::AdjustToContents</enum> 
     454                     </property> 
     455                     <item> 
     456                      <property name="text"> 
     457                       <string>Sync with snapshots</string> 
     458                      </property> 
     459                     </item> 
     460                     <item> 
     461                      <property name="text"> 
     462                       <string>Daily</string> 
     463                      </property> 
     464                     </item> 
     465                     <item> 
     466                      <property name="text"> 
     467                       <string>Hourly</string> 
     468                      </property> 
     469                     </item> 
     470                     <item> 
     471                      <property name="text"> 
     472                       <string>30 Minutes</string> 
     473                      </property> 
     474                     </item> 
     475                     <item> 
     476                      <property name="text"> 
     477                       <string>10 Minutes</string> 
     478                      </property> 
     479                     </item> 
     480                     <item> 
     481                      <property name="text"> 
     482                       <string>Manual</string> 
     483                      </property> 
     484                     </item> 
     485                    </widget> 
     486                   </item> 
     487                   <item> 
     488                    <widget class="QTimeEdit" name="time_replicate"> 
     489                     <property name="displayFormat"> 
     490                      <string>@ h AP</string> 
     491                     </property> 
     492                    </widget> 
     493                   </item> 
     494                   <item> 
     495                    <spacer name="horizontalSpacer_6"> 
     496                     <property name="orientation"> 
     497                      <enum>Qt::Horizontal</enum> 
     498                     </property> 
     499                     <property name="sizeType"> 
     500                      <enum>QSizePolicy::Preferred</enum> 
     501                     </property> 
     502                     <property name="sizeHint" stdset="0"> 
     503                      <size> 
     504                       <width>20</width> 
     505                       <height>20</height> 
     506                      </size> 
     507                     </property> 
     508                    </spacer> 
     509                   </item> 
     510                  </layout> 
     511                 </item> 
     512                </layout> 
     513               </widget> 
     514              </item> 
     515              <item> 
     516               <spacer name="verticalSpacer"> 
     517                <property name="orientation"> 
     518                 <enum>Qt::Vertical</enum> 
     519                </property> 
     520                <property name="sizeHint" stdset="0"> 
     521                 <size> 
     522                  <width>20</width> 
     523                  <height>40</height> 
     524                 </size> 
     525                </property> 
     526               </spacer> 
     527              </item> 
     528             </layout> 
     529            </widget> 
     530           </item> 
     531          </layout> 
     532         </widget> 
     533         <widget class="QWidget" name="tab_2"> 
     534          <attribute name="title"> 
     535           <string>Excluded Data</string> 
     536          </attribute> 
     537          <layout class="QVBoxLayout" name="verticalLayout_7"> 
     538           <item> 
     539            <widget class="QListWidget" name="list_rep_excludes"> 
     540             <property name="selectionMode"> 
     541              <enum>QAbstractItemView::ExtendedSelection</enum> 
     542             </property> 
     543             <property name="selectionBehavior"> 
     544              <enum>QAbstractItemView::SelectRows</enum> 
     545             </property> 
     546             <property name="sortingEnabled"> 
     547              <bool>true</bool> 
     548             </property> 
     549            </widget> 
     550           </item> 
     551           <item> 
     552            <layout class="QHBoxLayout" name="horizontalLayout_9"> 
     553             <item> 
     554              <widget class="QToolButton" name="tool_rep_addexclude"> 
     555               <property name="text"> 
     556                <string notr="true"/> 
     557               </property> 
     558               <property name="icon"> 
     559                <iconset resource="lPreserve.qrc"> 
     560                 <normaloff>:/images/list-add.png</normaloff>:/images/list-add.png</iconset> 
     561               </property> 
     562               <property name="popupMode"> 
     563                <enum>QToolButton::InstantPopup</enum> 
     564               </property> 
     565              </widget> 
     566             </item> 
     567             <item> 
     568              <widget class="QToolButton" name="tool_rep_remexclude"> 
     569               <property name="text"> 
     570                <string notr="true"/> 
     571               </property> 
     572               <property name="icon"> 
     573                <iconset resource="lPreserve.qrc"> 
     574                 <normaloff>:/images/list-remove.png</normaloff>:/images/list-remove.png</iconset> 
     575               </property> 
     576               <property name="autoRaise"> 
     577                <bool>false</bool> 
     578               </property> 
     579              </widget> 
     580             </item> 
     581            </layout> 
     582           </item> 
     583          </layout> 
     584         </widget> 
    436585        </widget> 
    437586       </item> 
Note: See TracChangeset for help on using the changeset viewer.