Changeset 93

Show
Ignore:
Timestamp:
01/30/06 09:15:51 (3 years ago)
Author:
Shawn Liu
Message:

a bug of table widget fixed, thanks to Gertje

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/current/win32/import/dwt/widgets/table.d

    r82 r93  
    3131private import dwt.events.listeners; 
    3232private import dwt.util.util; 
     33private import dwt.util.vector; 
    3334private import dwt.util.eventhandler; 
    3435 
     
    550551    int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    551552    int columnCount = count + 1; 
    552     if (count == 1 && columns [0] is null) count = 0; 
     553    if (count == 1 && columns.length == 0) count = 0; 
    553554    if (!(0 <= index && index <= count)) error(__FILE__, __LINE__, DWT.ERROR_INVALID_RANGE); 
    554     if (count == columns.length) { 
    555         TableColumn [] newColumns = new TableColumn [columns.length + 4]; 
    556         System.arraycopy (cast(Object[])columns, 0, cast(Object[])newColumns, 0, columns.length); 
    557         columns = newColumns; 
    558     } 
     555     
     556//  if (count == columns.length) { 
     557//      TableColumn [] newColumns = new TableColumn [columns.length + 4]; 
     558//      System.arraycopy (cast(Object[])columns, 0, cast(Object[])newColumns, 0, columns.length); 
     559//      columns = newColumns; 
     560//  } 
    559561    int itemCount = OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0); 
    560562    for (int i=0; i<itemCount; i++) { 
     
    621623    * or LVM_SETCOLUMN. 
    622624    */ 
    623     System.arraycopy (columns, index, columns, index + 1, count - index); 
    624     columns [index] = column; 
     625    TVector!(TableColumn).insert(columns, column, index); 
     626//  System.arraycopy (columns, index, columns, index + 1, count - index); 
     627//  columns [index] = column; 
    625628    if (index == 0) { 
    626629        if (count > 0) { 
     
    722725    super.createWidget (); 
    723726    items = new TableItem [4]; 
    724   columns = new TableColumn [4]; 
     727//    columns = new TableColumn [4]; 
    725728} 
    726729 
     
    848851    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    849852    int columnCount = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    850     int index = 0; 
    851     while (index < columnCount) { 
    852         if (columns [index] is column) break; 
    853         index++; 
    854     } 
     853     
     854    int index = TVector!(TableColumn).indexOf(columns, column); 
     855//  int index = 0; 
     856//  while (index < columnCount) { 
     857//      if (columns [index] is column) break; 
     858//      index++; 
     859//  } 
    855860    boolean first = false; 
    856861    if (index == 0) { 
     
    894899    } 
    895900    if (first) index = 0; 
    896     System.arraycopy (columns, index + 1, columns, index, --columnCount - index); 
    897     columns [columnCount] = null; 
     901     
     902    TVector!(TableColumn).remove(columns, index); 
     903//  System.arraycopy (columns, index + 1, columns, index, --columnCount - index); 
     904//  columns [columnCount] = null; 
     905 
    898906    int itemCount = OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0); 
    899907    for (int i=0; i<itemCount; i++) { 
     
    980988            HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    981989            int columnCount = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    982             if (columnCount == 1 && columns [0] is null) columnCount = 0; 
     990            if (columnCount == 1 && columns.length == 0) columnCount = 0; 
    983991            int i = 0; 
    984992            while (i < columnCount) { 
     
    10461054    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    10471055    int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1048     if (count == 1 && columns [0] is null) count = 0; 
     1056    if (count == 1 && columns.length == 0) count = 0; 
    10491057    if (!(0 <= index && index < count)) error(__FILE__, __LINE__, DWT.ERROR_INVALID_RANGE); 
    10501058    return columns [index]; 
     
    10721080    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    10731081    int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1074     if (count == 1 && columns [0] is null) count = 0; 
     1082    if (count == 1 && columns.length == 0) count = 0; 
    10751083    return count; 
    10761084} 
     
    11001108    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    11011109    int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1102     if (count == 1 && columns [0] is null) count = 0; 
    1103     TableColumn [] result = new TableColumn [count]; 
    1104     System.arraycopy (columns, 0, result, 0, count); 
    1105     return result; 
     1110    if (count == 1 && columns.length == 0) count = 0; 
     1111     
     1112    return columns.dup; 
    11061113} 
    11071114 
     
    15461553    checkWidget (); 
    15471554    if (column is null) error(__FILE__, __LINE__, DWT.ERROR_NULL_ARGUMENT); 
    1548     HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    1549     int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1550     for (int i=0; i<count; i++) { 
    1551         if (columns [i] is column) return i; 
    1552     } 
    1553     return -1; 
     1555     
     1556    return TVector!(TableColumn).indexOf(columns, column); 
     1557     
     1558//  HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
     1559//  int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
     1560//  for (int i=0; i<count; i++) { 
     1561//      if (columns [i] is column) return i; 
     1562//  } 
     1563//  return -1; 
    15541564} 
    15551565 
     
    16181628    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    16191629    int columnCount = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1620     if (columnCount == 1 && columns [0] is null) columnCount = 0; 
    1621     for (int i=0; i<columnCount; i++) { 
     1630    if (columnCount == 1 && columns.length == 0) columnCount = 0; 
     1631    for (int i=0; i<columns.length; i++) { 
    16221632        TableColumn column = columns [i]; 
    16231633        if (!column.isDisposed ()) column.releaseResources (); 
     
    18091819    HWND hwndHeader = cast(HWND)OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0); 
    18101820    int columnCount = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    1811     if (columnCount == 1 && columns [0] is null) columnCount = 0; 
     1821    if (columnCount == 1 && columns.length == 0) columnCount = 0; 
    18121822    int itemCount = OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0); 
    18131823     
     
    18641874    if (imageList !is null) { 
    18651875        int i = 0; 
    1866         while (i < columnCount) { 
     1876        while (i < columns.length) { 
    18671877            TableColumn column = columns [i]; 
    18681878            if (column.getImage () !is null) break; 
     
    19311941    int length = indices.length; 
    19321942    if (length == 0 || ((style & DWT.SINGLE) != 0 && length > 1)) return; 
    1933     LVITEM* lvItem = new LVITEM ()
     1943    LVITEM lvItem
    19341944    lvItem.state = OS.LVIS_SELECTED; 
    19351945    lvItem.stateMask = OS.LVIS_SELECTED; 
     
    19411951        if (indices [i] >= 0) { 
    19421952            ignoreSelect = true; 
    1943             OS.SendMessage (handle, OS.LVM_SETITEMSTATE, indices [i], lvItem); 
     1953            OS.SendMessage (handle, OS.LVM_SETITEMSTATE, indices [i], &lvItem); 
    19441954            ignoreSelect = false; 
    19451955        } 
     
    19661976    */ 
    19671977    if (index < 0) return; 
    1968     LVITEM* lvItem = new LVITEM ()
     1978    LVITEM lvItem
    19691979    lvItem.state = OS.LVIS_SELECTED; 
    19701980    lvItem.stateMask = OS.LVIS_SELECTED; 
    19711981    ignoreSelect = true; 
    1972     OS.SendMessage (handle, OS.LVM_SETITEMSTATE, index, lvItem); 
     1982    OS.SendMessage (handle, OS.LVM_SETITEMSTATE, index, &lvItem); 
    19731983    ignoreSelect = false; 
    19741984} 
     
    20102020        * items.  Indices must be greater than -1. 
    20112021        */ 
    2012         LVITEM* lvItem = new LVITEM ()
     2022        LVITEM lvItem
    20132023        lvItem.state = OS.LVIS_SELECTED; 
    20142024        lvItem.stateMask = OS.LVIS_SELECTED; 
    20152025        for (int i=start; i<=end; i++) { 
    20162026            ignoreSelect = true; 
    2017             OS.SendMessage (handle, OS.LVM_SETITEMSTATE, i, lvItem); 
     2027            OS.SendMessage (handle, OS.LVM_SETITEMSTATE, i, &lvItem); 
    20182028            ignoreSelect = false; 
    20192029        } 
     
    20342044    checkWidget (); 
    20352045    if ((style & DWT.SINGLE) != 0) return; 
    2036     LVITEM* lvItem = new LVITEM ()
     2046    LVITEM lvItem
    20372047    lvItem.mask = OS.LVIF_STATE; 
    20382048    lvItem.state = OS.LVIS_SELECTED; 
    20392049    lvItem.stateMask = OS.LVIS_SELECTED; 
    20402050    ignoreSelect = true; 
    2041     OS.SendMessage (handle, OS.LVM_SETITEMSTATE, -1, lvItem); 
     2051    OS.SendMessage (handle, OS.LVM_SETITEMSTATE, -1, &lvItem); 
    20422052    ignoreSelect = false; 
    20432053} 
     
    25022512    * LVM_SETCOUMNWIDTH with LVSCW_AUTOSIZE. 
    25032513    */ 
    2504     if (count == 1 && columns [0] is null) { 
     2514    if (count == 1 && columns.length == 0) { 
    25052515        int newWidth = 0; 
    25062516        count = OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0); 
     
    31763186            case OS.HDN_DIVIDERDBLCLICKW: 
    31773187            case OS.HDN_DIVIDERDBLCLICKA:{ 
    3178                 NMHEADER* phdn = new NMHEADER (); 
    3179                 OS.MoveMemory (phdn, lParam, NMHEADER.sizeof); 
     3188                NMHEADER* phdn = cast(NMHEADER*)lParam; 
    31803189                TableColumn column = columns [phdn.iItem]; 
    31813190                if (column !is null && !column.getResizable ()) { 
     
    32233232                            if (isDisposed ()) return LDWTRESULT.ZERO;   
    32243233                            int count = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0); 
    3225                             if (count == 1 && columns [0] is null) count = 0; 
     3234                            if (count == 1 && columns.length == 0) count = 0; 
    32263235                            /* 
    32273236                            * It is possible (but unlikely), that application 
     
    32303239                            * for those columns that have not been destroyed. 
    32313240                            */ 
    3232                             TableColumn [] newColumns = new TableColumn [count]; 
    3233                             System.arraycopy (columns, 0, newColumns, 0, count); 
     3241                            TableColumn [] newColumns = columns.dup; 
    32343242                            for (int i=phdn.iItem+1; i<count; i++) { 
    32353243                                if (!newColumns [i].isDisposed ()) { 
     
    32443252            case OS.HDN_ITEMDBLCLICKW:       
    32453253            case OS.HDN_ITEMDBLCLICKA: { 
    3246                 NMHEADER* phdn = new NMHEADER (); 
    3247                 OS.MoveMemory (phdn, lParam, NMHEADER.sizeof); 
     3254                NMHEADER* phdn = cast(NMHEADER*)lParam; 
    32483255                TableColumn column = columns [phdn.iItem]; 
    32493256                if (column !is null) {