📄 ctablevieweditor.class
字号:
' Gambas class fileEVENT Save(Row AS Integer, Column AS Integer, Data AS String)EVENT Click()EVENT Change()EVENT Data(Row AS Integer, Column AS Integer)EVENT Create()PRIVATE $hTableView AS TableViewPRIVATE $hComboBox AS ComboBoxPRIVATE $hTextBox AS TextBoxPRIVATE $hTextArea AS TextAreaPRIVATE $hPanel AS PanelPRIVATE $sText AS StringPRIVATE $iRow AS IntegerPRIVATE $iColumn AS IntegerPRIVATE $hCurrent AS ObjectPRIVATE $bIgnore AS BooleanPRIVATE $bIgnoreScroll AS BooleanPRIVATE $bMandatory AS BooleanPRIVATE $bTrim AS BooleanPRIVATE $iMaxHeight AS IntegerPUBLIC SUB _new(hTableView AS TableView) DIM hCont AS Container $hTableView = hTableView hCont = hTableView.Parent $hPanel = NEW Panel(hCont) $hPanel.Raise $hTextBox = NEW TextBox($hPanel) AS "Editor" $hTextBox.Border = FALSE $hTextBox.Font = hTableView.Font $iMaxHeight = $hTextBox.Font.Height("X") + 2 $hComboBox = NEW ComboBox($hPanel) AS "Editor" $hComboBox.Font = hTableView.Font $hTextArea = NEW TextArea($hPanel) AS "Editor" $hTextArea.Border = FALSE $hTextArea.Font = hTableView.Font $hPanel.Background = $hTextBox.Background Object.Attach($hTableView, ME, "TableView") HideEditorENDPUBLIC FUNCTION MoveTo(iRow AS Integer, iCol AS Integer) AS Boolean IF iCol < 0 THEN DEC iRow iCol = $hTableView.Columns.Count - 1 ELSE IF iCol >= $hTableView.Columns.Count THEN INC iRow iCol = 0 ENDIF IF iRow < 0 THEN RETURN TRUE IF iRow >= $hTableView.Rows.Count THEN RETURN TRUE IF HideEditor() THEN RETURN TRUE $bIgnore = TRUE $hTableView[iRow, iCol].EnsureVisible $hTableView.MoveTo(iRow, iCol) RAISE Change $bIgnore = FALSE $bIgnoreScroll = TRUEENDPUBLIC FUNCTION SaveEditor() AS Boolean DIM sNewText AS String DIM bCancel AS Boolean DIM sText AS String IF $hCurrent THEN sNewText = $hCurrent.Text IF $bTrim THEN sNewText = Trim(sNewText) IF sNewText <> $sText THEN IF NOT sNewText THEN IF $bMandatory THEN Message.Warning(("This field cannot be void.")) $hCurrent.Text = $sText GOTO _ERROR ENDIF ENDIF 'PRINT "SaveEditor: "; $hCurrent.Text RAISE Save($iRow, $iColumn, $hCurrent.Text) AS bCancel IF bCancel THEN GOTO _ERROR LoadEditor $hCurrent.Text = $sText ENDIF ENDIF RETURN_ERROR: $bIgnore = TRUE $hTableView.MoveTo($iRow, $iColumn) $hTableView.Current.EnsureVisible $hCurrent.Text = $sText SetFocus $bIgnore = FALSE RETURN TRUEENDPRIVATE FUNCTION HideEditor() AS Boolean IF $hCurrent THEN IF NOT $hPanel.Visible THEN RETURN IF SaveEditor() THEN RETURN TRUE ENDIF $hTextBox.Hide $hComboBox.Hide $hTextArea.Hide $hPanel.Hide $hCurrent = NULL '$hTableView.MoveTo(-1, -1) RETURNENDPUBLIC FUNCTION Hide() AS Boolean RETURN HideEditor()ENDPRIVATE FUNCTION MoveEditor() AS Boolean IF NOT $hCurrent THEN RETURN WITH $hTableView.Current $hPanel.Move($hTableView.X + .X, $hTableView.Y + .Y, .W, .H) IF $hCurrent = $hTextArea THEN $hCurrent.Move(0, 0, .W, .H) ELSE $hCurrent.Move(0, 0, .W, Min(.H,$iMaxheight)) ENDIF END WITH WITH $hPanel IF .X < ($hTableView.X + $hTableView.Rows.Width) THEN RETURN TRUE IF .Y < ($hTableView.Y + $hTableView.Columns.Height) THEN RETURN TRUE IF (.X + .W) >= ($hTableView.X + $hTableView.W) THEN RETURN TRUE IF (.Y + .H) >= ($hTableView.Y + $hTableView.H) THEN RETURN TRUE END WITHENDPRIVATE SUB LoadEditor() $hTableView.Current.Refresh $sText = $hTableView.Current.Text 'PRINT "LoadEditor: "; $sTextENDPRIVATE FUNCTION ShowEditor() AS Boolean IF NOT $hCurrent THEN RETURN IF MoveEditor() THEN $hPanel.Hide $hCurrent.Hide $hCurrent = NULL ELSE $hCurrent.Show $hPanel.Show $hPanel.Raise ENDIFENDPUBLIC SUB Resize() 'ShowEditor HideEditorENDPUBLIC FUNCTION ShowTextBox(OPTIONAL bMandatory AS Boolean, OPTIONAL bTrim AS Boolean, OPTIONAL iMaxLength AS Integer) AS Boolean IF HideEditor() THEN RETURN TRUE LoadEditor $hTextBox.Text = $sText $hTextBox.MaxLength = iMaxLength $iRow = $hTableView.Row $iColumn = $hTableView.Column $hCurrent = $hTextBox ShowEditor SetFocus $bMandatory = bMandatory $bTrim = bTrimENDPUBLIC FUNCTION ShowTextArea(OPTIONAL bMandatory AS Boolean, OPTIONAL bTrim AS Boolean) AS Boolean IF HideEditor() THEN RETURN TRUE LoadEditor $hTextArea.Text = $sText $iRow = $hTableView.Row $iColumn = $hTableView.Column $hCurrent = $hTextArea ShowEditor SetFocus $bMandatory = bMandatory $bTrim = bTrimENDPUBLIC FUNCTION ShowComboBox(sList AS String, OPTIONAL bMandatory AS Boolean, OPTIONAL bTrim AS Boolean) AS Boolean IF HideEditor() THEN RETURN TRUE LoadEditor $hComboBox.ReadOnly = FALSE $hComboBox.MaxLength = 0 $hComboBox.ReadOnly = bMandatory $hComboBox.List = sList $hComboBox.Text = $sText $iRow = $hTableView.Row $iColumn = $hTableView.Column $hCurrent = $hComboBox MoveEditor $hComboBox.Visible = TRUE $hPanel.Show SetFocus $bMandatory = bMandatory $bTrim = bTrimENDPUBLIC SUB Editor_KeyPress() SELECT Key.Code CASE Key.Esc LAST.Text = $sText TRY LAST.Selection() CASE Key.Left IF NOT $hCurrent.ReadOnly THEN IF $hCurrent.Pos > 0 THEN RETURN ENDIF ENDIF MoveTo($hTableView.Row, $hTableView.Column - 1) STOP EVENT CASE Key.Right, Key.Return, Key.Enter IF NOT $hCurrent.ReadOnly THEN IF $hCurrent.Pos < $hCurrent.Length THEN RETURN ENDIF ENDIF IF MoveTo($hTableView.Row, $hTableView.Column + 1) THEN RAISE Create() ENDIF STOP EVENT CASE Key.Up MoveTo($hTableView.Row - 1, $hTableView.Column) STOP EVENT CASE Key.Down MoveTo($hTableView.Row + 1, $hTableView.Column) 'Key.Cancel = TRUE STOP EVENT CASE Key.PageUp MoveTo($hTableView.Row - 10, $hTableView.Column) STOP EVENT CASE Key.PageDown MoveTo($hTableView.Row + 10, $hTableView.Column) STOP EVENT CASE Key.Home IF Key.Control THEN MoveTo(0, 0) ENDIF CASE Key.End IF Key.Control THEN MoveTo($hTableView.Rows.Count - 1, $hTableView.Columns.Count - 1) ENDIF END SELECTENDPRIVATE SUB SetFocus() TRY $hCurrent.SetFocusENDPUBLIC SUB TableView_Change() IF $bIgnore THEN RETURN IF NOT $hTableView.Visible THEN RETURN IF $hTableView.Row < 0 THEN PRINT "TableView_Change: Row < 0" RETURN ENDIF IF HideEditor() THEN RETURN $bIgnore = TRUE RAISE Change $bIgnore = FALSEENDPUBLIC SUB TableView_Data(Row AS Integer, Column AS Integer) RAISE Data(Row, Column) 'IF $sCharset THEN ' $hTableView.Data.Text = Conv($hTableView.Data.Text, $sCharset, Desktop.Charset) 'ENDIFENDPUBLIC SUB TableView_Scroll() IF $bIgnoreScroll THEN $bIgnoreScroll = FALSE RETURN ENDIF ShowEditor 'HideEditorENDPUBLIC SUB TableView_Resize() HideEditorENDPUBLIC SUB Editor_Click() SaveEditorENDPUBLIC SUB Editor_Activate() SaveEditorENDPUBLIC SUB Close() Object.Detach($hTableView) $hTableView = NULLENDPUBLIC SUB TableView_MouseDown() HideEditorEND'PUBLIC SUB TableView_MouseUp(X AS Integer, Y AS Integer, Button AS Integer)PUBLIC SUB TableView_Click() RAISE Click IF NOT $hCurrent THEN IF $hTableView.Row >= 0 THEN TableView_Change ENDIF ENDIFENDPUBLIC SUB Editor_GotFocus() TRY LAST.Selection()ENDPUBLIC SUB TableView_Delete() $hTableView = NULL $hComboBox = NULL $hTextBox = NULL $hTextArea = NULL $hPanel = NULLEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -