31  addStyleClass( 
"AccountRegister" );
 
   37  auto lw = setLayout( std::make_unique< Wt::WVBoxLayout >() );
 
   42  m_toolBar = lw-> addWidget( std::make_unique< ToolBar >() );
 
   46  m_tableView = lw-> addWidget( std::make_unique< GCW::Gui::TableView >(), 1 );
 
   52  m_statusBar = lw-> addWidget( std::make_unique< StatusBar >() );
 
   57  tableView()-> setSortingEnabled       ( 
false                                                         );
 
   59  tableView()-> setSelectionBehavior    ( Wt::SelectionBehavior::Rows                                   );
 
   60  tableView()-> setSelectionMode        ( Wt::SelectionMode::Single                                     );
 
   62  tableView()-> setEditTriggers         ( Wt::EditTrigger::SingleClicked                                );
 
   64  tableView()-> setEditOptions          ( Wt::EditOption::MultipleEditors | Wt::EditOption::LeaveEditorsOpen );
 
   71  tableView()-> setAttributeValue    ( 
"oncontextmenu",
"event.cancelBubble=true;event.returnValue=false;return false;" );
 
   72  tableView()-> mouseWentUp().connect( 
this, &Widget::on_showPopup_triggered );
 
   77  Editor::applyDelegates( tableView() );
 
   79  tableView()-> headerClicked().connect( [=]( 
int col, 
Wt::WMouseEvent event )
 
   82    if( tableView()-> selectedIndexes().size() == 0 )
 
   83      tableView()-> select( baseModel()-> index( 893, 0 ) );
 
   85      tableView()-> clearSelection();
 
   88    std::cout << __FILE__ << 
":" << __LINE__ << 
" headerClicked:" << col << std::endl;
 
  112    selectionChanged().connect( [=]()
 
  114      std::cout << __FILE__ << 
":" << __LINE__
 
  115        << 
" selectionChanged" 
  120#ifdef KEYPRESSED_ONLY_FIRES_WHEN_EDITORS_ARE_NOT_OPEN_NOT_USEFUL_HERE 
  124      std::cout << __FILE__ << 
":" << __LINE__ << 
" " << _event.
charCode() << std::endl;
 
  128  tableView()-> clicked().connect( 
this,  &Widget::on_tableView_clicked );
 
  130  m_baseModel       = std::make_shared< BaseModel                 >();
 
  131  m_sortFilterModel = std::make_shared< Wt::WSortFilterProxyModel >();
 
  132  m_batchEditModel  = std::make_shared< Wt::WBatchEditProxyModel  >();
 
 
  255  if( askThisSession && askForever )
 
  260    auto msgBox = addChild( std::make_unique< Wt::WDialog >( 
TR(
"gcw.AccountRegister.delete.title") ) );
 
  261    auto templt = msgBox-> contents()-> addNew< Wt::WTemplate >( 
TR(
"gcw.AccountRegister.delete.contents") );
 
  262    msgBox-> setClosable( 
true );
 
  263    msgBox-> setMovable ( 
true );
 
  266    auto rememberAlways  = templt-> bindNew< Wt::WCheckBox   >( 
"rememberAlways" , 
TR(
"gcw.AccountRegister.delete.rem1"  ) );
 
  267    auto rememberSession = templt-> bindNew< Wt::WCheckBox   >( 
"rememberSession", 
TR(
"gcw.AccountRegister.delete.rem2"  ) );
 
  268    auto pbCancel        = templt-> bindNew< Wt::WPushButton >( 
"cancel"         , 
TR(
"gcw.AccountRegister.delete.cancel") );
 
  269    auto pbDelete        = templt-> bindNew< Wt::WPushButton >( 
"delete"         , 
TR(
"gcw.AccountRegister.delete.delete") );
 
  271    rememberAlways  -> setToolTip( 
TR( 
"gcw.AccountRegister.delete.rem1.toolTip"   ) );
 
  272    rememberSession -> setToolTip( 
TR( 
"gcw.AccountRegister.delete.rem2.toolTip"   ) );
 
  273    pbCancel        -> setToolTip( 
TR( 
"gcw.AccountRegister.delete.cancel.toolTip" ) );
 
  274    pbDelete        -> setToolTip( 
TR( 
"gcw.AccountRegister.delete.delete.toolTip" ) );
 
  276    auto splitGuid = baseModel()-> getSplitGuid( m_rightClickIndex.row() );
 
  278    transMan.loadSplit( splitGuid );
 
  280    templt-> bindString( 
"payFrom" , transMan.getFromAccount  () );
 
  281    templt-> bindString( 
"payTo"   , transMan.getToAccount    () );
 
  282    templt-> bindString( 
"date"    , transMan.getDateAsString () );
 
  283    templt-> bindString( 
"desc"    , transMan.getDescription  () );
 
  284    templt-> bindString( 
"amount"  , transMan.getValueAsString() );
 
  293      clicked().connect( [rememberSession,rememberAlways]()
 
  295        rememberSession-> setDisabled( rememberAlways-> checkState() == Wt::CheckState::Checked );
 
  304      finished().connect( [
this,rememberSession,msgBox]( 
Wt::DialogCode _code )
 
  306        if( _code == Wt::DialogCode::Accepted )
 
  310          deleteRow( m_rightClickIndex.row() );
 
  313        removeChild( msgBox );
 
  323    deleteRow( m_rightClickIndex.row() );
 
 
  456  if( _event.button() != Wt::MouseButton::Right )
 
  462  m_rightClickIndex = _index;
 
  474  while( m_popupMenu.count() )
 
  475    m_popupMenu.removeItem( m_popupMenu.itemAt(0) );
 
  478  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.SortBy"     ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  479  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.FilterBy"   ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  480  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.RenamePage" ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  481  m_popupMenu.addSeparator();
 
  482  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.Duplicate"  ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  492    if( !(baseModel()-> isDeletable( _index )) )
 
  493      item-> setDisabled( 
true );
 
  497  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.RemoveSplits"     ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  498  m_popupMenu.addSeparator();
 
  499  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.Enter"            ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  500  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.Cancel"           ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  501  m_popupMenu.addSeparator();
 
  502  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.ManageDocument"   ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  503  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.OpenDocument"     ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  506  m_popupMenu.addSeparator();
 
  517       TR( 
"gcw.AccountRegister.Popup.Jump" ),
 
  522    if( !(baseModel()-> isJumpable( _index )) )
 
  523      item-> setDisabled( 
true );
 
  541  m_popupMenu.addSeparator();
 
  542  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.BlankTransaction" ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  543  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.GoDate"           ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  544  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.SplitTransaction" ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  545  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.EditExchangeRate" ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  546  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.Schedule"         ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  547  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.Jump"             ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  548  m_popupMenu.addSeparator();
 
  549  m_popupMenu.addItem( 
TR( 
"gcw.AccountRegister.Popup.AssignPayment"    ), std::make_unique< Wt::WText >() )-> setDisabled( 
true );
 
  553  if( !tableView()-> isSelected( _index ) )
 
  555    tableView()-> select( _index, Wt::SelectionFlag::ClearAndSelect );
 
  559  if( m_popupMenu.isHidden() )
 
  561    m_popupMenu.popup( _event );
 
 
  620  tableView()-> setHeaderAlignment( 
asInt( 
Col::DATE        ), Wt::AlignmentFlag::Right  );
 
  621  tableView()-> setColumnAlignment( 
asInt( 
Col::DATE        ), Wt::AlignmentFlag::Right  );
 
  625  tableView()-> setHeaderAlignment( 
asInt( 
Col::ACTION      ), Wt::AlignmentFlag::Center );
 
  626  tableView()-> setColumnAlignment( 
asInt( 
Col::ACTION      ), Wt::AlignmentFlag::Center );
 
  645  tableView()-> setHeaderAlignment( 
asInt( 
Col::DEBIT       ), Wt::AlignmentFlag::Right  );
 
  646  tableView()-> setColumnAlignment( 
asInt( 
Col::DEBIT       ), Wt::AlignmentFlag::Right  );
 
  650  tableView()-> setHeaderAlignment( 
asInt( 
Col::CREDIT      ), Wt::AlignmentFlag::Right  );
 
  651  tableView()-> setColumnAlignment( 
asInt( 
Col::CREDIT      ), Wt::AlignmentFlag::Right  );
 
  655  tableView()-> setHeaderAlignment( 
asInt( 
Col::BALANCE     ), Wt::AlignmentFlag::Right  );
 
  656  tableView()-> setColumnAlignment( 
asInt( 
Col::BALANCE     ), Wt::AlignmentFlag::Right  );
 
  658  statusBar()-> setPresent    ( baseModel()-> present    () );
 
  659  statusBar()-> setProjected  ( baseModel()-> projected  () );
 
  660  statusBar()-> setReconciled ( baseModel()-> reconciled () );
 
  661  statusBar()-> setFuture     ( baseModel()-> future     () );
 
  662  statusBar()-> setCleared    ( baseModel()-> cleared    () );
 
  663  statusBar()-> setRowCount   ( baseModel()-> splitCount () );
 
 
  683  if( m_selectIndex.isValid() )
 
  684    if( m_selectIndex.row() == _index.row() )
 
  687  m_selectIndex = _index;
 
  690  std::cout << __FILE__ << 
":" << __LINE__
 
  691    << 
" " << __FUNCTION__ << 
"(" << _index.row() << 
")" 
  692    << 
" isR/O:" << baseModel()-> isReadOnly( _index.row() )
 
  693    << 
" i("  << _index.row() << 
"," << _index.column() << 
")" 
  694    << 
" si(" << m_selectIndex.row() << 
"," << m_selectIndex.column() << 
")" 
  696  wApp-> processEvents();
 
  699  tableView()-> closeEditors( 
true );
 
  700  tableView()-> scrollTo( _index );
 
  701  tableView()-> select( _index, Wt::SelectionFlag::ClearAndSelect );
 
  703  if( !baseModel()-> isReadOnly( _index.row() ) )