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() ) )