DEFINE m_dialog_reference VARCHAR(10)
DEFINE m_choice_reference VARCHAR(10)
DEFINE ma_left, ma_right ARRAY [10] OF RECORD
item_value CHAR(30)
END RECORD
#------------------------#
FUNCTION lchoice_test()
#------------------------#
DEFINE l_layoutmanager_reference VARCHAR(10)
DEFINE l_statusbar_reference VARCHAR(10)
DEFINE l_menubar_reference VARCHAR(10)
DEFINE l_confirm_button VARCHAR(10)
DEFINE l_panel VARCHAR(10)
DEFINE l_index SMALLINT
CALL fgl_setenv("ADVPL","1")
#Instancia janela de diálogo
LET m_dialog_reference = _ADVPL_create_component(NULL,"LDIALOG")
CALL _ADVPL_set_property(m_dialog_reference,"ENABLE_ESC_CLOSE",FALSE)
CALL _ADVPL_set_property(m_dialog_reference,"TITLE","Ordem das Divisões")
#Instancia barra de status/mensagens na janela de diálogo
LET l_statusbar_reference = _ADVPL_create_component(NULL,"LSTATUSBAR",m_dialog_reference)
#Instancia componente para renderização de componentes em relação ao posicionamento em tela
LET l_layoutmanager_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",m_dialog_reference)
CALL _ADVPL_set_property(l_layoutmanager_reference,"MARGIN",FALSE)
CALL _ADVPL_set_property(l_layoutmanager_reference,"COLUMNS_COUNT",1)
CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_WIDTH",600)
CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_HEIGHT",340)
#Instancia uma barra de menu na janela de diálogo
LET l_menubar_reference = _ADVPL_create_component(NULL,"LMENUBAR",l_layoutmanager_reference)
#Adiciona um botão CONFIRMAR na barra de menu
LET l_confirm_button = _ADVPL_create_component(NULL,"LMENUBUTTON",l_menubar_reference)
CALL _ADVPL_set_property(l_confirm_button,"IMAGE","CONFIRM_EX")
CALL _ADVPL_set_property(l_confirm_button,"EVENT","lchoice_exit")
#Adiciona um painel logo a seguir do menu para que possa incluir o componente LChoice
LET l_panel = _ADVPL_create_component(NULL,"LPANEL",l_layoutmanager_reference)
CALL _ADVPL_set_property(l_panel,"ALIGN","CENTER")
CALL _ADVPL_set_property(l_panel,"SIZE",540,280)
#Cria o componente LChoice de multipla escolha
LET m_choice_reference = _ADVPL_create_component(NULL,"LCHOICE",l_panel)
#Determina que os itens devem sempre ser reorganizados na lista quando forem movimentados
CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)
#Dimensiona o componente
CALL _ADVPL_set_property(m_choice_reference,"SIZE",540,280)
CALL _ADVPL_set_property(m_choice_reference,"ALIGN","CENTER")
#Esconde os botões para trocar os itens de posição no choice direito
CALL _ADVPL_set_property(m_choice_reference,"SHOW_MOVE_BUTTONS",TRUE)
#Define a descrição (texto) do label esquerdo
CALL _ADVPL_set_property(m_choice_reference,"LEFT_LABEL_TEXT","Titulo ESQUERDA")
#Define a descrição (texto) do label direito
CALL _ADVPL_set_property(m_choice_reference,"RIGHT_LABEL_TEXT","Título DIREITA")
#Habilita o componente LChoice
CALL _ADVPL_set_property(m_choice_reference,"ENABLE",TRUE)
#Determina as funções de controle de movimentação de itens entre as listas para identificar movimentos não permitidos.
CALL _ADVPL_set_property(m_choice_reference,"LEFT_MOVE_EVENT","lchoice_checkCanMoveLeft")
CALL _ADVPL_set_property(m_choice_reference,"RIGHT_MOVE_EVENT","lchoice_checkCanMoveRight")
LET ma_left[01].item_value = 'valor 01'
LET ma_left[02].item_value = 'valor 02'
LET ma_left[03].item_value = 'valor 03'
LET ma_left[04].item_value = 'valor 04'
LET ma_left[05].item_value = 'valor 05'
LET ma_left[06].item_value = 'valor 06'
LET ma_left[07].item_value = 'valor 07'
LET ma_left[08].item_value = 'valor 08'
LET ma_left[09].item_value = 'valor 09'
LET ma_left[10].item_value = 'valor 10'
#Determinar as variaveis que irão armazenar o conteúdo das listas da direita e esquerda, indicando o total de linhas preenchidas em cada lista.
CALL _ADVPL_set_property(m_choice_reference,"LEFT_VARIABLE",ma_left,"item_value",10)
CALL _ADVPL_set_property(m_choice_reference,"VARIABLE",ma_right,"item_value",0)
#Ativar a janela de diálogo
CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",TRUE)
END FUNCTION
#---------------------------------------#
FUNCTION lchoice_checkCanMoveLeft()
#---------------------------------------#
DEFINE l_idx_selected SMALLINT
#Identificar o indice atual selecionado na lista da direita
LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "RIGHT_INDEX_SELECTED")
IF ma_right[l_idx_selected].item_value = "valor 05" THEN
CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser retornado para esquerda.","",0)
#Cancela a movimentação
RETURN FALSE
END IF
#Desmarca item selecionado na lista da direita e reorganiza dados
CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)
CALL _ADVPL_set_property(m_choice_reference,"RIGHT_SELECT_ITEM",l_idx_selected)
CALL _ADVPL_set_property(m_choice_reference,"LEFT_ORDER","ASC")
#Autoriza a movimentação
RETURN TRUE
END FUNCTION
#---------------------------------------#
FUNCTION lchoice_checkCanMoveRight()
#---------------------------------------#
DEFINE l_idx_selected SMALLINT
#Identificar o indice atual selecionado na lista da esquerda
LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "LEFT_INDEX_SELECTED")
IF ma_right[l_idx_selected].item_value = "valor 03" THEN
CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser movido para direita.","",0)
#Cancela a movimentação
RETURN FALSE
END IF
#Desmarca item selecionado na lista da esquerda e reorganiza dados
CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)
CALL _ADVPL_set_property(m_choice_reference,"LEFT_SELECT_ITEM",l_idx_selected)
CALL _ADVPL_set_property(m_choice_reference,"RIGHT_ORDER","ASC")
#Autoriza a movimentação
RETURN TRUE
END FUNCTION
#-------------------------#
FUNCTION lchoice_exit()
#-------------------------#
#Fecha a janela de diálogo
CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",FALSE)
END FUNCTION |