Changeset 66

Show
Ignore:
Timestamp:
04/18/08 11:57:18 (5 months ago)
Author:
Chris Miller
Message:

Fixed up Splitter. Added Splitter.splitPosition.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/win32/dfl/splitter.d

    r54 r66  
    211211        super.onMouseDown(mea); 
    212212         
    213         if(mea.button == MouseButtons.LEFT
     213        if(mea.button == MouseButtons.LEFT && 1 == mea.clicks
    214214        { 
    215215            initsplit(mea.x, mea.y); 
     
    254254            onSplitterMoved(sea); 
    255255        } 
     256    } 
     257     
     258     
     259    final Control getSplitControl() // package 
     260    { 
     261        Control splat; // Splitted. 
     262        // DMD 0.95: need 'this' to access member dock 
     263        //switch(dock()) 
     264        switch(this.dock()) 
     265        { 
     266            case DockStyle.LEFT: 
     267                foreach(Control ctrl; parent.controls()) 
     268                { 
     269                    if(DockStyle.LEFT != ctrl.dock) //if(this.dock != ctrl.dock) 
     270                        continue; 
     271                    // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
     272                    //if(ctrl == this) 
     273                    if(ctrl == cast(Control)this) 
     274                        return splat; 
     275                    splat = ctrl; 
     276                } 
     277                break; 
     278             
     279            case DockStyle.RIGHT: 
     280                foreach(Control ctrl; parent.controls()) 
     281                { 
     282                    if(DockStyle.RIGHT != ctrl.dock) //if(this.dock != ctrl.dock) 
     283                        continue; 
     284                    // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
     285                    //if(ctrl == this) 
     286                    if(ctrl == cast(Control)this) 
     287                        return splat; 
     288                    splat = ctrl; 
     289                } 
     290                break; 
     291             
     292            case DockStyle.TOP: 
     293                foreach(Control ctrl; parent.controls()) 
     294                { 
     295                    if(DockStyle.TOP != ctrl.dock) //if(this.dock != ctrl.dock) 
     296                        continue; 
     297                    // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
     298                    //if(ctrl == this) 
     299                    if(ctrl == cast(Control)this) 
     300                        return splat; 
     301                    splat = ctrl; 
     302                } 
     303                break; 
     304             
     305            case DockStyle.BOTTOM: 
     306                foreach(Control ctrl; parent.controls()) 
     307                { 
     308                    if(DockStyle.BOTTOM != ctrl.dock) //if(this.dock != ctrl.dock) 
     309                        continue; 
     310                    // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
     311                    //if(ctrl == this) 
     312                    if(ctrl == cast(Control)this) 
     313                        return splat; 
     314                    splat = ctrl; 
     315                } 
     316                break; 
     317        } 
     318        return null; 
    256319    } 
    257320     
     
    282345            } 
    283346             
    284             Control splat; // Splitted. 
    285347            int adj, val, vx; 
    286              
    287             // DMD 0.95: need 'this' to access member dock 
    288             //switch(dock()) 
    289             switch(this.dock()) 
     348            auto splat = getSplitControl(); // Splitted. 
     349            if(splat) 
    290350            { 
    291                 case DockStyle.LEFT: 
    292                     drawxorClient(lastpos, 0); 
    293                     foreach(Control ctrl; parent.controls()) 
    294                     { 
    295                         if(DockStyle.NONE == ctrl.dock) 
    296                             continue; 
    297                         // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
    298                         //if(ctrl == this) 
    299                         if(ctrl == cast(Control)this) 
     351                // DMD 0.95: need 'this' to access member dock 
     352                //switch(dock()) 
     353                switch(this.dock()) 
     354                { 
     355                    case DockStyle.LEFT: 
     356                        drawxorClient(lastpos, 0); 
     357                        //val = left - splat.left + mea.x - downpos.x; 
     358                        val = left - splat.left + mea.x - downpos; 
     359                        if(val < msize) 
     360                            val = msize; 
     361                        splat.width = val; 
     362                        break; 
     363                     
     364                    case DockStyle.RIGHT: 
     365                        drawxorClient(lastpos, 0); 
     366                        //adj = right - splat.left + mea.x - downpos.x; 
     367                        adj = right - splat.left + mea.x - downpos; 
     368                        val = splat.width - adj; 
     369                        vx = splat.left + adj; 
     370                        if(val < msize) 
    300371                        { 
    301                             if(splat) 
    302                             { 
    303                                 //val = left - splat.left + mea.x - downpos.x; 
    304                                 val = left - splat.left + mea.x - downpos; 
    305                                 if(val < msize) 
    306                                     val = msize; 
    307                                 splat.width = val; 
    308                             } 
    309                             break; 
     372                            vx -= msize - val; 
     373                            val = msize; 
    310374                        } 
    311                         splat = ctrl; 
    312                     } 
    313                     break; 
    314                  
    315                 case DockStyle.RIGHT: 
    316                     drawxorClient(lastpos, 0); 
    317                     foreach(Control ctrl; parent.controls()) 
    318                     { 
    319                         if(DockStyle.NONE == ctrl.dock) 
    320                             continue; 
    321                         // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
    322                         //if(ctrl == this) 
    323                         if(ctrl == cast(Control)this) 
     375                        splat.bounds = Rect(vx, splat.top, val, splat.height); 
     376                        break; 
     377                     
     378                    case DockStyle.TOP: 
     379                        drawxorClient(0, lastpos); 
     380                        //val = top - splat.top + mea.y - downpos.y; 
     381                        val = top - splat.top + mea.y - downpos; 
     382                        if(val < msize) 
     383                            val = msize; 
     384                        splat.height = val; 
     385                        break; 
     386                     
     387                    case DockStyle.BOTTOM: 
     388                        drawxorClient(0, lastpos); 
     389                        //adj = bottom - splat.top + mea.y - downpos.y; 
     390                        adj = bottom - splat.top + mea.y - downpos; 
     391                        val = splat.height - adj; 
     392                        vx = splat.top + adj; 
     393                        if(val < msize) 
    324394                        { 
    325                             if(splat) 
    326                             { 
    327                                 //adj = right - splat.left + mea.x - downpos.x; 
    328                                 adj = right - splat.left + mea.x - downpos; 
    329                                 val = splat.width - adj; 
    330                                 vx = splat.left + adj; 
    331                                 if(val < msize) 
    332                                 { 
    333                                     vx -= msize - val; 
    334                                     val = msize; 
    335                                 } 
    336                                 splat.bounds = Rect(vx, splat.top, val, splat.height); 
    337                             } 
    338                             break; 
     395                            vx -= msize - val; 
     396                            val = msize; 
    339397                        } 
    340                         splat = ctrl; 
    341                     } 
    342                     break; 
    343                  
    344                 case DockStyle.TOP: 
    345                     drawxorClient(0, lastpos); 
    346                     foreach(Control ctrl; parent.controls()) 
    347                     { 
    348                         if(DockStyle.NONE == ctrl.dock) 
    349                             continue; 
    350                         // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
    351                         //if(ctrl == this) 
    352                         if(ctrl == cast(Control)this) 
    353                         { 
    354                             if(splat) 
    355                             { 
    356                                 //val = top - splat.top + mea.y - downpos.y; 
    357                                 val = top - splat.top + mea.y - downpos; 
    358                                 if(val < msize) 
    359                                     val = msize; 
    360                                 splat.height = val; 
    361                             } 
    362                             break; 
    363                         } 
    364                         splat = ctrl; 
    365                     } 
    366                     break; 
    367                  
    368                 case DockStyle.BOTTOM: 
    369                     drawxorClient(0, lastpos); 
    370                     foreach(Control ctrl; parent.controls()) 
    371                     { 
    372                         if(DockStyle.NONE == ctrl.dock) 
    373                             continue; 
    374                         // DMD 0.95: overloads int(Object o) and int(Control ctrl) both match argument list for opEquals 
    375                         //if(ctrl == this) 
    376                         if(ctrl == cast(Control)this) 
    377                         { 
    378                             if(splat) 
    379                             { 
    380                                 //adj = bottom - splat.top + mea.y - downpos.y; 
    381                                 adj = bottom - splat.top + mea.y - downpos; 
    382                                 val = splat.height - adj; 
    383                                 vx = splat.top + adj; 
    384                                 if(val < msize) 
    385                                 { 
    386                                     vx -= msize - val; 
    387                                     val = msize; 
    388                                 } 
    389                                 splat.bounds = Rect(splat.left, vx, splat.width, val); 
    390                             } 
    391                             break; 
    392                         } 
    393                         splat = ctrl; 
    394                     } 
    395                     break; 
     398                        splat.bounds = Rect(splat.left, vx, splat.width, val); 
     399                        break; 
     400                     
     401                    default: ; 
     402                } 
    396403            } 
    397404             
     
    442449     
    443450     
    444     /+ 
    445     // TODO: implement. 
    446      
    447451    /// 
    448452    final void splitPosition(int pos) // setter 
    449453    { 
    450          
     454        auto splat = getSplitControl(); // Splitted. 
     455        if(splat) 
     456        { 
     457            // DMD 0.95: need 'this' to access member dock 
     458            //switch(dock()) 
     459            switch(this.dock()) 
     460            { 
     461                case DockStyle.LEFT: 
     462                case DockStyle.RIGHT: 
     463                    splat.width = pos; 
     464                    break; 
     465                 
     466                case DockStyle.TOP: 
     467                case DockStyle.BOTTOM: 
     468                    splat.height = pos; 
     469                    break; 
     470                 
     471                default: ; 
     472            } 
     473        } 
    451474    } 
    452475     
     
    455478    final int splitPosition() // getter 
    456479    { 
    457          
    458     } 
    459     +/ 
     480        auto splat = getSplitControl(); // Splitted. 
     481        if(splat) 
     482        { 
     483            // DMD 0.95: need 'this' to access member dock 
     484            //switch(dock()) 
     485            switch(this.dock()) 
     486            { 
     487                case DockStyle.LEFT: 
     488                case DockStyle.RIGHT: 
     489                    return splat.width; 
     490                 
     491                case DockStyle.TOP: 
     492                case DockStyle.BOTTOM: 
     493                    return splat.height; 
     494                 
     495                default: ; 
     496            } 
     497        } 
     498        return -1; 
     499    } 
    460500     
    461501