<?PHP
 
/*****************************************************************************
 
  | @script_type -  PHP-WinBinder
 
  | @scriptname  -  hnwb_ListView.example.phpw
 
  | @version     -  1.0
 
  | -------------------------------------------------------------------------
 
  | @author      -  Horst Nogajski <[email protected]>
 
  | @copyright   -  (c) 1999 - 2007
 
  | @licence     -  LGPL
 
  | -------------------------------------------------------------------------
 
  | $Source: /WINBINDER/hnwb_ListViewClass/hnwb_ListView.example_3.phpw,v $
 
  | $Id: hnwb_ListView.example_3.phpw,v 1.3 2007/01/04 22:21:42 horst Exp $
 
 ****************************************************************************/
 
 
 
 
include('config.php');
 
define('APPNAME', basename( __FILE__ ));
 
 
 
 
//------------------------------------------------------------------------------
 
 
 
#--> STEP 1:
 
    // define ID-Constants for your ListViews
 
    if(!defined('IDC_LISTVIEW_1')) define('IDC_LISTVIEW_1', 1001);
 
    if(!defined('IDC_LISTVIEW_2')) define('IDC_LISTVIEW_2', 1002);
 
 
 
 
#--> STEP 2:
 
    // Create window with: WBC_NOTIFY, WBC_MOUSEMOVE | WBC_HEADERSEL !!!
 
    $winmain = wb_create_window(null, AppWindow, APPNAME, WBC_CENTER, WBC_CENTER,
 
                540, 449, WBC_NOTIFY, WBC_MOUSEMOVE | WBC_HEADERSEL );
 
 
 
#--> STEP 3:
 
    // create a global INI-Object
 
    $inifile = str_replace('.phpw','', __FILE__).'.ini';
 
    $ini = new hn_ini($inifile,TRUE,TRUE);
 
 
 
 
#--> STEP 4:
 
    //
 
    // define a customized Button-CLassExtension for the first ListView:
 
    // 1):
 
    //     define the ButtonLabels in Array $LABELS
 
    // 2):
 
    //     define the Actions for the Buttons in Method Button_Event_Handler()
 
    // 3):
 
    //     define enabled/disabled states in Method display_Buttons()
 
    //
 
class My_ListView_with_Buttons extends hnwb_ListView_Buttons
 
{
 
 
    // Button-Texts
 
    var $LABELS = array('copy selected','move selected','copy checked','move checked');
 
 
 
    // we create this as a Reference-Handle to the TargetListView, because we
 
    // want copy DataRows from the first to the second ListView
 
    var $lv2 = null;
 
 
 
    function My_ListView_with_Buttons($ini=null, $Lines=TRUE, $CheckBoxes=TRUE, $IniSectionPrefix='')
 
    {
 
        // CALL THE PARENT CONSTRUCTOR
 
        $this->hnwb_ListView_Buttons($ini, $Lines, $CheckBoxes, $IniSectionPrefix);
 
    }
 
 
 
    function Button_Event_Handler($id)
 
    {
 
        switch($id)
 
        {
 
            case $this->Button_ID_first:
 
                $data = $this->Data_GET(ID_LV_DATATYPE_SELECTED, FALSE);
 
                $this->lv2->Data_PUT($data, TRUE);
 
                unset($data);
 
                break;
 
 
            case $this->Button_ID_first + 1:
 
                $data = $this->Data_GET(ID_LV_DATATYPE_SELECTED, FALSE);
 
                $this->Data_DELETE(ID_LV_DATATYPE_SELECTED);
 
                $this->lv2->Data_PUT($data, TRUE);
 
                unset($data);
 
                break;
 
 
            case $this->Button_ID_first + 2:
 
                $data = $this->Data_GET(ID_LV_DATATYPE_CHECKED, FALSE);
 
                $this->lv2->Data_PUT($data, TRUE);
 
                unset($data);
 
                break;
 
 
            case $this->Button_ID_first + 3:
 
                $data = $this->Data_GET(ID_LV_DATATYPE_CHECKED, FALSE);
 
                $this->Data_DELETE(ID_LV_DATATYPE_CHECKED);
 
                $this->lv2->Data_PUT($data, TRUE);
 
                unset($data);
 
                break;
 
        }
 
        $this->display_Buttons(FALSE);
 
    }
 
 
 
    function display_Buttons($on=TRUE)
 
    {
 
        // THIS PART IS REQUIRED:
 
        for($i=$this->Button_ID_first;$i<=$this->Button_ID_last;$i++)
 
        {
 
            wb_set_visible($this->bt_ctrl{$i},$on);
 
        }
 
        // END REQUIRED PART
 
 
        // THE FOLLOWING PARTS CAN BE DEFINED TO SUITE YOUR NEEDS:
 
        // Buttons should only enabled if there Actions make sence depending
 
        // to the current ListViewState
 
        if($this->Count_Selected()>0)
 
        {
 
            wb_set_enabled($this->bt_ctrl{$this->Button_ID_first},TRUE);
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +1)},TRUE);
 
        }
 
        else
 
        {
 
            wb_set_enabled($this->bt_ctrl{$this->Button_ID_first},FALSE);
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +1)},FALSE);
 
        }
 
 
        if($this->has_CheckBoxes() && $this->Count_Checked()>0)
 
        {
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +2)},TRUE);
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +3)},TRUE);
 
        }
 
        else
 
        {
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +2)},FALSE);
 
            wb_set_enabled($this->bt_ctrl{($this->Button_ID_first +3)},FALSE);
 
        }
 
    }
 
 
} // END class My_ListView_with_Buttons
 
 
 
#--> STEP 5
 
    // get Data for the Listview (e.g. from MySQL-Query)
 
    $data = example_data();
 
 
 
 
 
#--> STEP 6, CREATE THE SECOND LISTVIEW FIRST   - (use the standard Buttons)
 
    $lv2 = new hnwb_ListView_Buttons($ini,TRUE,TRUE);
 
 
    // define first ID for the Buttons
 
    $lv2->define_Start_ID(9000);
 
 
    // create the Control
 
    $lv2->ctrl = wb_create_control($winmain, ListView, '', 10, 250, 511, 145, IDC_LISTVIEW_2, WBC_VISIBLE | WBC_ENABLED | WBC_SORT | WBC_LINES | WBC_CHECKBOXES, 0, 0);
 
 
    // setup the ini-object, (ATTENTION: THIS MUST BE CALLED DIRECTLY AFTER THE CONTROL IS CREATED)
 
    $lv2->initialize_ini();
 
 
    // use AutoConfigure for the Headernames without Uniqe-IDs
 
    $lv2->set_ASSOC_AUTO_Column_Header($data);
 
 
    // finally setup the enhanced Control, (ATTENTION: THIS MUST BE CALLED AFTER THE ColumnHeader ARE CREATED)
 
    $lv2->initialize();
 
 
 
 
 
#--> STEP 7:
 
    // create a _CUSTOMIZED_ Object for the FIRST LISTVIEW:
 
 
    $lv1 = new My_ListView_with_Buttons($ini,TRUE,TRUE);
 
 
    // define first ID for the Buttons
 
    $lv1->define_Start_ID(9010);
 
 
    // create the Control
 
    $lv1->ctrl = wb_create_control($winmain, ListView, '', 10, 15, 511, 195, IDC_LISTVIEW_1, WBC_VISIBLE | WBC_ENABLED | WBC_SORT | WBC_LINES | WBC_CHECKBOXES, 0, 0);
 
 
    // setup the ini-object, (ATTENTION: THIS MUST BE CALLED AFTER THE CONTROL IS CREATED)
 
    $lv1->initialize_ini();
 
 
    // put Reference to the Second ListView
 
    $lv1->lv2 =& $lv2;
 
 
    // use AutoConfigure for the Headernames and setup the listview to handle
 
    // data with Unique-ID's (uid-field = id)
 
    $lv1->set_ASSOC_AUTO_Column_Header($data, 'id');
 
 
    // finally setup the enhanced Control, (ATTENTION: THIS MUST BE CALLED AFTER THE ColumnHeader ARE CREATED)
 
    $lv1->initialize();
 
 
 
    $lv1->Data_PUT($data);
 
 
 
 
wb_set_handler($winmain, "process_main");
 
wb_main_loop();
 
 
 
 
//-------------------------------------------------------------------- FUNCTIONS
 
 
 
function process_main($window, $id, $ctrl=0, $lparam1=0, $lparam2=0)
 
{
 
 
#--> STEP 8:
 
    // make the $LV_cfg and the ListView-ObjectHandlers global!
 
    if(!isset($GLOBALS['LV_cfg'])) $GLOBALS['LV_cfg'] = null;
 
    global $lv1, $lv2;
 
 
 
    switch($id)
 
    {
 
 
 
#--> STEP 9:
 
        // First Hook into the MainProcess-EventHandler,
 
        // with fallthrough ! (without break-command)
 
 
        case IDDEFAULT:
 
            $lv1->Event_Handler($window, $id, $ctrl, $lparam1, $lparam2, $GLOBALS['LV_cfg']);
 
            $lv2->Event_Handler($window, $id, $ctrl, $lparam1, $lparam2, $GLOBALS['LV_cfg']);
 
 
 
 
#--> STEP 10:
 
        // For each ListView-ObjectHandler:
 
        // set a second Hook into the MainProcess-EventHandler,
 
 
        case $lv1->get_ID():
 
            $lv1->Event_Handler($window, $id, $ctrl, $lparam1, $lparam2, $GLOBALS['LV_cfg']);
 
            break;
 
 
        case $lv2->get_ID():
 
            $lv2->Event_Handler($window, $id, $ctrl, $lparam1, $lparam2, $GLOBALS['LV_cfg']);
 
            break;
 
 
 
 
#--> STEP 11:
 
        // For each Button-Extended-ListView-ObjectHandler:
 
        // catch and proceed Button-Events
 
 
        case $id >= $lv1->Button_ID_first && $id <= $lv1->Button_ID_last:
 
            $lv1->Button_Event_Handler($id);
 
            break;
 
 
        case $id >= $lv2->Button_ID_first && $id <= $lv2->Button_ID_last:
 
            $lv2->Button_Event_Handler($id);
 
            break;
 
 
 
 
#--> STEP 12:
 
        // For each ListView-ObjectHandler:
 
        // CleanUp at ProcessTermination
 
 
        case IDCLOSE:
 
            $GLOBALS['LV_cfg'] = null;
 
            unset($GLOBALS['LV_cfg']);
 
 
            // CleanUp the SECOND LISTVIEW FIRST !!
 
            $lv2->Destroy();
 
            $lv2=null;
 
            unset($lv2);
 
 
            $lv1->Destroy();
 
            $lv1=null;
 
            unset($lv1);
 
 
            wb_destroy_window($window);
 
            break;
 
 
    }
 
 
}
 
 
 
function example_data()
 
{
 
    $data_src = array(
 
        array('company'=>'company',            'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'',                'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'ab ltd.',            'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'de ltd.',            'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'fg ltd.',            'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'xy ltd.',            'name'=>'doe',        'firstname'=>'john'),
 
        array('company'=>'company',            'name'=>'wesson',    'firstname'=>'al'),
 
        array('company'=>'company',            'name'=>'baker',    'firstname'=>'barry'),
 
        array('company'=>'company',            'name'=>'butcher',    'firstname'=>'barry'),
 
        array('company'=>'company',            'name'=>'baker',    'firstname'=>'terry'),
 
        array('company'=>'xy ltd.',            'name'=>'patterson','firstname'=>'aldus'),
 
        array('company'=>'trade united',    'name'=>'hugley',    'firstname'=>'jenny')
 
    );
 
    $data = array();
 
    $uid = 0;
 
    for($i=0;$i<3;$i++)
 
    {
 
        foreach($data_src as $d)
 
        {
 
            $data[] = array_merge($d,array('id'=>$uid));
 
            $uid++;
 
        }
 
    }
 
    return $data;
 
}
 
 
?>
 
 
 |