From 213cb02697c6b380d18973d64547d5fe209fce6a Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 20 May 2011 14:36:10 +0000 Subject: [PATCH] Patch level : 10.1002 Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento : Aggiunta una funzione per ordinare le righe di un documento che ordina le righe a blocchi in ordine di codice, i blocchi sono delimitiati da righe senza codice (descrizioni). Per attivarla bisogna aggiungere un bottone con id 43 alla maschera. git-svn-id: svn://10.65.10.50/branches/R_10_00@22143 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/velib.h | 1 + ve/velib06.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/ve/velib.h b/ve/velib.h index 250ebbf9f..bc175edd6 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -1011,6 +1011,7 @@ public: static bool datacambio_handler( TMask_field& f, KEY key ); static bool codval_handler( TMask_field& f, KEY key ); static bool confirm_handler( TMask_field& f, KEY key ); + static bool sort_row_handler( TMask_field& f, KEY key ); static bool ss_notify(TSheet_field& ss, int r, KEY key); static bool ss_handler(TMask_field& f, KEY key); virtual void user_set_handler( short fieldid, int index); diff --git a/ve/velib06.cpp b/ve/velib06.cpp index c36a72a6b..8d6d460ef 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -161,6 +161,9 @@ TDocumento_mask::TDocumento_mask(const char* td) set_handler( DLG_PREVIEW, print_handler ); set_handler( DLG_EMAIL, print_handler ); set_handler( DLG_CONFERMA, confirm_handler ); + if (id2pos(DLG_SORT) > 0) + set_handler( DLG_SORT, sort_row_handler ); + const TString_array& handlers = tdoc.handlers(); FOR_EACH_ARRAY_ROW(handlers, r, riga) @@ -4177,6 +4180,42 @@ bool TDocumento_mask::confirm_handler( TMask_field& f, KEY key ) } return ok; } +static int row_compare(TSheet_field& s, int r1, int r2) +{ + for (int i = r1 + 1; i < r2; i++) + if (s.row(i).get(s.cid2index(FR_CODART))[0] == '\0') + return -1; + + const char* c1 = s.row(r1).get(s.cid2index(FR_CODART)); + const char* c2 = s.row(r2).get(s.cid2index(FR_CODART)); + + if (c1 && *c1 && c2 && *c2) + return strcmp(c1, c2); + + return r1 - r2; +} + +bool TDocumento_mask::sort_row_handler( TMask_field& f, KEY key ) +{ + if (key == K_SPACE) + { + TSheet_field & sheet = f.mask().sfield(F_SHEET); + TString_array saved_rows = sheet.rows_array(); + const int nrows = sheet.items(); + + sheet.sort(row_compare); + if (nrows == sheet.items()) + sheet.force_update(); + else + { + sheet.rows_array() = saved_rows; + sheet.force_update(); + return message_box("L'ordinamento non ha avuto un esito positivo"); + } + + } + return true; +} void TDocumento_mask::sel_color() {