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 >();
248 static bool askThisSession =
true;
254 if( askThisSession || askForever )
259 auto msgBox = addChild( std::make_unique< Wt::WDialog >(
TR(
"gcw.AccountRegister.delete.title") ) );
260 auto templt = msgBox-> contents()-> addNew< Wt::WTemplate >(
TR(
"gcw.AccountRegister.delete.contents") );
261 msgBox-> setClosable(
true );
262 msgBox-> setMovable (
true );
265 auto rememberAlways = templt-> bindNew< Wt::WCheckBox >(
"rememberAlways" ,
TR(
"gcw.AccountRegister.delete.rem1" ) );
266 auto rememberSession = templt-> bindNew< Wt::WCheckBox >(
"rememberSession",
TR(
"gcw.AccountRegister.delete.rem2" ) );
267 auto pbCancel = templt-> bindNew< Wt::WPushButton >(
"cancel" ,
TR(
"gcw.AccountRegister.delete.cancel") );
268 auto pbDelete = templt-> bindNew< Wt::WPushButton >(
"delete" ,
TR(
"gcw.AccountRegister.delete.delete") );
270 auto splitGuid = baseModel()-> getSplitGuid( m_rightClickIndex.row() );
285 clicked().connect( [rememberSession,rememberAlways]()
287 rememberSession-> setDisabled( rememberAlways-> checkState() == Wt::CheckState::Checked );
296 finished().connect( [
this,rememberSession,msgBox](
Wt::DialogCode _code )
298 if( _code == Wt::DialogCode::Accepted )
300 askThisSession = rememberSession-> checkState() == Wt::CheckState::Checked;
302 deleteRow( m_rightClickIndex.row() );
305 removeChild( msgBox );
315 deleteRow( m_rightClickIndex.row() );
448 if( _event.button() != Wt::MouseButton::Right )
454 m_rightClickIndex = _index;
466 while( m_popupMenu.count() )
467 m_popupMenu.removeItem( m_popupMenu.itemAt(0) );
470 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.SortBy" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
471 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.FilterBy" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
472 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.RenamePage" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
473 m_popupMenu.addSeparator();
474 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.Duplicate" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
484 if( !(baseModel()-> isDeletable( _index )) )
485 item-> setDisabled(
true );
489 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.RemoveSplits" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
490 m_popupMenu.addSeparator();
491 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.Enter" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
492 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.Cancel" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
493 m_popupMenu.addSeparator();
494 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.ManageDocument" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
495 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.OpenDocument" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
498 m_popupMenu.addSeparator();
509 TR(
"gcw.AccountRegister.Popup.Jump" ),
514 if( !(baseModel()-> isJumpable( _index )) )
515 item-> setDisabled(
true );
524 TR(
"gcw.AccountRegister.Popup.edit" ),
533 m_popupMenu.addSeparator();
534 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.BlankTransaction" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
535 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.GoDate" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
536 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.SplitTransaction" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
537 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.EditExchangeRate" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
538 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.Schedule" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
539 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.Jump" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
540 m_popupMenu.addSeparator();
541 m_popupMenu.addItem(
TR(
"gcw.AccountRegister.Popup.AssignPayment" ), std::make_unique< Wt::WText >() )-> setDisabled(
true );
545 if( !tableView()-> isSelected( _index ) )
550 if( m_popupMenu.isHidden() )
552 m_popupMenu.popup( _event );
602 tableView()-> setModel( m_baseModel );
606 tableView()-> setHeaderAlignment(
asInt(
Col::DATE ), Wt::AlignmentFlag::Right );
607 tableView()-> setColumnAlignment(
asInt(
Col::DATE ), Wt::AlignmentFlag::Right );
611 tableView()-> setHeaderAlignment(
asInt(
Col::ACTION ), Wt::AlignmentFlag::Center );
612 tableView()-> setColumnAlignment(
asInt(
Col::ACTION ), Wt::AlignmentFlag::Center );
631 tableView()-> setHeaderAlignment(
asInt(
Col::DEBIT ), Wt::AlignmentFlag::Right );
632 tableView()-> setColumnAlignment(
asInt(
Col::DEBIT ), Wt::AlignmentFlag::Right );
636 tableView()-> setHeaderAlignment(
asInt(
Col::CREDIT ), Wt::AlignmentFlag::Right );
637 tableView()-> setColumnAlignment(
asInt(
Col::CREDIT ), Wt::AlignmentFlag::Right );
641 tableView()-> setHeaderAlignment(
asInt(
Col::BALANCE ), Wt::AlignmentFlag::Right );
642 tableView()-> setColumnAlignment(
asInt(
Col::BALANCE ), Wt::AlignmentFlag::Right );
644 statusBar()-> setPresent ( baseModel()-> present () );
645 statusBar()-> setProjected ( baseModel()-> projected () );
646 statusBar()-> setReconciled ( baseModel()-> reconciled () );
647 statusBar()-> setFuture ( baseModel()-> future () );
648 statusBar()-> setCleared ( baseModel()-> cleared () );
649 statusBar()-> setRowCount ( baseModel()-> splitCount () );
669 if( m_selectIndex.isValid() )
670 if( m_selectIndex.row() == _index.row() )
673 m_selectIndex = _index;
676 std::cout << __FILE__ <<
":" << __LINE__
677 <<
" " << __FUNCTION__ <<
"(" << _index.row() <<
")"
678 <<
" isR/O:" << baseModel()-> isReadOnly( _index.row() )
679 <<
" i(" << _index.row() <<
"," << _index.column() <<
")"
680 <<
" si(" << m_selectIndex.row() <<
"," << m_selectIndex.column() <<
")"
684 tableView()-> clearSelection();
685 tableView()-> closeEditors(
true );
686 tableView()-> scrollTo( _index );
687 tableView()-> select( _index, Wt::SelectionFlag::ClearAndSelect );
689 if( !baseModel()-> isReadOnly( _index.row() ) )