1. Greg Haberek - xControls - redraw issue in a complicated window?

Greg,

Hopefully you're still around...and still working on xControls!

I've got a program with multiple windows with size/placement handled by
xControls.  The attached program shows what the UI should look like.  The problem
is when the vertical splitter is moved the controls under the "DB2" tab
disappear.  They re-appear when the "IFS" tab is selected.

Am I doing something wrong or is this a limitation of xControls?

Thanks for your help!

include Win32lib.ew
include TBAR_XPM.E
include xControls.ew
include appsmall.e

--------------------------------------------------------------------------------
--  Window Main
global constant Main = createEx( Window, "F.R.O.G. for IBM iSeries DB2", 0,
	0, 0, 400, 300, 0, 0 )
setIcon( Main,"iseries.ico")
global constant FileM = createEx( Menu, "File", Main, 0, 1, 0, 0, 0, 0 )
global constant FileNewM = createEx( Menu, "&New", FileM, 0, 0, 0, 0, 0, 0 )
global constant NewIFSFileMI = createEx( MenuItem, "&IFS File", FileNewM, 0, 0,
0, 0, 0, 0 )
global constant FileOpenMI = createEx( MenuItem, "&Open", FileM, 0, 0, 0, 0, 0,
0 )
global constant FileSaveMI = createEx( MenuItem, "&Save", FileM, 0, 0, 0, 0, 0,
0 )
setEnable( FileSaveMI, w32False )
global constant FileSaveAsMI = createEx( MenuItem, "Save &As", FileM, 0, 0, 0,
0, 0, 0 )
setEnable( FileSaveAsMI, w32False )
global constant FileExitMI = createEx( MenuItem, "Exit", FileM, 0, 2, 0, 0, 0, 0
)

global constant EditM = createEx( Menu, "&Edit", Main, 0, 0, 0, 0, 0, 0 )
global constant EditUndoMI = createEx( MenuItem, "&Undo", EditM, 0, 0, 0, 0, 0,
0 )
setEnable( EditUndoMI, w32False )
global constant EditCopyMI = createEx( MenuItem, "&Copy", EditM, 0, 0, 0, 0, 0,
0 )
setEnable( EditCopyMI, w32False )
global constant EditCutMI = createEx( MenuItem, "Cu&t", EditM, 0, 0, 0, 0, 0, 0
)
setEnable( EditCutMI, w32False )
global constant EditPasteMI = createEx( MenuItem, "&Paste", EditM, 0, 0, 0, 0,
0, 0 )
setEnable( EditPasteMI, w32False )
global constant EditSelectAllMI = createEx( MenuItem, "&Select All", EditM, 0,
0, 0, 0, 0, 0 )
setEnable( EditSelectAllMI, w32False )

global constant OptionsM = createEx( Menu, "Options", Main, 0, 6, 0, 0, 0, 0 )
global constant PreferencesMI = createEx( MenuItem, "Preferences", OptionsM, 0,
7, 0, 0, 0, 0 )

global constant HelpM = createEx( Menu, "Help", Main, 0, 3, 0, 0, 0, 0 )
global constant HelpContentsMI = createEx( MenuItem, "Contents", HelpM, 0, 4, 0,
0, 0, 0 )
global constant HelpAboutMI = createEx( MenuItem, "About", HelpM, 0, 5, 0, 0, 0,
0 )
global constant MainTB = createEx( ToolBar, "", Main, 0, 0, 812, 34, 0, 0 )
global constant MainSB = createEx( StatusBar, "", Main, 0, 0, 0, 0, 0, 0 )

global constant SysPopupPM = createEx( Popup, "SysPopupPM", Main, 0, -700, 0, 0,
0, 0 )
global constant SysNewPI = createEx( MenuItem, "New", SysPopupPM, 0, -701, 0, 0,
0, 0 )
global constant SysConnectPropPI = createEx( MenuItem, "Set Connection
&Properties", SysPopupPM, 0, -702, 0, 0, 0, 0 )
global constant SysConnDiscPI = createEx( MenuItem, "&Connect", SysPopupPM, 0,
-703, 0, 0, 0, 0 )
global constant SysPropsPI = createEx( MenuItem, "&Properties", SysPopupPM, 0,
-704, 0, 0, 0, 0 )
global constant SysFindPI = createEx( MenuItem, "&Filter", SysPopupPM, 0, -705,
0, 0, 0, 0 )
global constant SysEditLiblPI = createEx( MenuItem, "Edit &Library List",
SysPopupPM, 0, -706, 0, 0, 0, 0 )
global constant SysExecCmdPI = createEx( MenuItem, "E&xecute Command",
SysPopupPM, 0, -707, 0, 0, 0, 0)
global constant SysClosePI = createEx( MenuItem, "Cl&ose Open File", SysPopupPM,
0, -708, 0, 0, 0, 0)
global constant SysRefreshPI = createEx( MenuItem, "&Refresh", SysPopupPM, 0,
-709, 0, 0, 0, 0 )
global constant SysWrkMgtM = createEx( Menu, "&Work Management", SysRefreshPI,
0, -710, 0, 0, 0, 0 )
global constant SysMsgsPI = createEx( MenuItem, "&Messages", SysWrkMgtM, 0,
-711, 0, 0, 0, 0 )
global constant SysJobsPI = createEx( MenuItem, "&Jobs", SysWrkMgtM, 0, -712, 0,
0, 0, 0 )
global constant SysPrintersPI = createEx( MenuItem, "&Printers", SysWrkMgtM, 0,
-713, 0, 0, 0, 0 )
global constant SysSrvJobsPI = createEx( MenuItem, "&ServerJobs", SysWrkMgtM, 0,
-714, 0, 0, 0, 0 )
global constant SysSplfPI = createEx( MenuItem, "&Spooled Files", SysWrkMgtM, 0,
-715, 0, 0, 0, 0 )

global constant LibPopupPM = createEx( Popup, "LibPopupPM", Main, 0, -100, 0, 0,
0, 0 )
global constant LibPropsPI = createEx( MenuItem, "&Properties", LibPopupPM, 0,
-101, 0, 0, 0, 0 )
global constant LibRefreshPI = createEx( MenuItem, "&Refresh", LibPopupPM, 0,
-102, 0, 0, 0, 0 )

global constant FilePopupPM = createEx( Popup, "FilePopupPM", Main, 0, -300, 0,
0, 0, 0 )
global constant FilePropsPI = createEx( MenuItem, "&Properties", FilePopupPM, 0,
-301, 0, 0, 0, 0 )
global constant FileViewPI = createEx( MenuItem, "&View", FilePopupPM, 0, -302,
0, 0, 0, 0 )
global constant FileGenDDLPI = createEx( MenuItem, "&Generate Definition
Language", FilePopupPM, 0, -303, 0, 0, 0, 0 )
global constant FileRefreshPI = createEx( MenuItem, "&Refresh", FilePopupPM, 0,
-304, 0, 0, 0, 0 )

global constant LVPopupPM = createEx( Popup, "LVPopupPM", Main, 0, -400, 0, 0,
0, 0 )
global constant InsertPrefixPI = createEx( MenuItem, "Insert with prefix",
LVPopupPM, 0, -401, 0, 0, 0, 0 )
global constant Level2popup_101 = createEx( Menu, "Insert As", InsertPrefixPI,
0, -402, 0, 0, 0, 0 )
global constant InsertAsAvgPI = createEx( MenuItem, "avg()", Level2popup_101, 0,
-403, 0, 0, 0, 0 )
global constant InsertAsCountPI = createEx( MenuItem, "count()",
Level2popup_101, 0, -404, 0, 0, 0, 0 )
global constant InsertAsMaxPI = createEx( MenuItem, "max()", Level2popup_101, 0,
-405, 0, 0, 0, 0 )
global constant InsertAsMinPI = createEx( MenuItem, "min()", Level2popup_101, 0,
-406, 0, 0, 0, 0 )
global constant InsertAsStdDevPI = createEx( MenuItem, "stddev()",
Level2popup_101, 0, -407, 0, 0, 0, 0 )
global constant InsertAsSumPI = createEx( MenuItem, "sum()", Level2popup_101, 0,
-408, 0, 0, 0, 0 )
global constant InsertAsVarPI = createEx( MenuItem, "var()", Level2popup_101, 0,
-409, 0, 0, 0, 0 )
global constant ShiftColumnPI = createEx( MenuItem, "Shift to Column",
LVPopupPM, 0, -410, 0, 0, 0, 0 )
global constant ColumnsToCSVPI = createEx( MenuItem, "Export Column Info",
LVPopupPM, 0, -411, 0, 0, 0, 0 )

global constant StatementREPM = createEx( Popup, "StatementREPM", Main, 0, -500,
0, 0, 0, 0 )
global constant SendToQMToolPI = createEx( MenuItem, "Send to QM Tool",
StatementREPM, 0, -501, 0, 0, 0, 0 )
global constant SaveSQLStmtPI = createEx( MenuItem, "Save SQL Statement",
StatementREPM, 0, -502, 0, 0, 0, 0 )
global constant OpenSQLStmtPI = createEx( MenuItem, "Open SQL Statement",
StatementREPM, 0, -503, 0, 0, 0, 0 )

global constant ResultsLVPM = createEx( Popup, "ResultsLVPM", Main, 0, -600, 0,
0, 0, 0)
global constant SelectColumnPI = createEx( MenuItem, "Shift To Column",
ResultsLVPM, 0, -601, 0, 0, 0, 0 )
global constant SelectAllPI = createEx( MenuItem, "Select All Rows",
ResultsLVPM, 0, -602, 0, 0, 0, 0 )
global constant CopyToClipPI = createEx(MenuItem, "Copy data to clipboard",
ResultsLVPM, 0, -603, 0, 0, 0, 0 )
global constant ViewLOBDataPI = createEx(MenuItem, "View LOB Data", ResultsLVPM,
0, -604, 0, 0, 0, 0 )

global constant IFSREPM = createEx( Popup, "File Preview Popup Menu", Main, 0,
19, 0, 0, 0, 0 )
global constant UndoPI = createEx( MenuItem, "Undo", IFSREPM, 0, 0, 0, 0, 0, 0 )
setEnable( UndoPI, w32False )
global constant CopyPI = createEx( MenuItem, "Copy", IFSREPM, 0, 0, 0, 0, 0, 0 )
setEnable( CopyPI, w32False )
global constant CutPI = createEx( MenuItem, "Cut", IFSREPM, 0, 0, 0, 0, 0, 0 )
setEnable( CutPI, w32False )
global constant PastePI = createEx( MenuItem, "Paste", IFSREPM, 0, 0, 0, 0, 0, 0
)
setEnable( PastePI, w32False )
global constant RESelectAllPI = createEx( MenuItem, "Select All", IFSREPM, 0, 0,
0, 0, 0, 0 )
setEnable( RESelectAllPI, w32False )

-- Create a geometry manager for the main window
global constant MainGMID = xControl( Geometry, "", Main, 0, 0, 0, 0, 0, 0)
-- Create the left portion of the main window
global constant mainLeft = create(Window, "", Main, 0, 0, 0, 0,
{WS_CHILD,WS_VISIBLE,WS_CLIPSIBLINGS} )
global constant MainTV = createEx( TreeView, "", mainLeft, 0, 0, 0, 0,
or_all({TVS_HASLINES,TVS_LINESATROOT,TVS_HASBUTTONS,TVS_SHOWSELALWAYS,TVS_INFOTIP}),
0 )
removeStyle(MainTV, WS_BORDER)
-- Split the left/right sides of the main window
global constant mainSplit = xControl( VSplitter, "", Main, 200, 0, 0, 0, 0,
MainGMID )
-- Create the right portion of the main window
global constant mainRightTC = create(TabControl, "", Main, 0, 0, 0, 0, 0 )
-- Create the DB2 tab item on the right
global constant DB2TI = create(TabItem, "DB2", mainRightTC, 0, 0, 0, 0, 0 )
-- Create a geometry control for the tab control
global constant mainRightTCGMID = xControl( Geometry, "", mainRightTC, 0, 0, 0,
0, 0, 0 )

-- Now create three sub windows of the DB2 tab item.  Start with the top window
and details list view
global constant DB2Top = create(Window, "", DB2TI, 0, 0, 0, 0,
{WS_CHILD,WS_VISIBLE,WS_CLIPSIBLINGS} )
-- Split the DB2 tab item in two
global constant DB2Split = xControl( HSplitter, "", DB2TI, 0, 200, 0, 0, 0,
mainRightTCGMID )
-- Create the bottom window of the DB2 tab item
global constant DB2Bottom = create(Window, "", DB2TI, 0, 0, 0, 0,
{WS_CHILD,WS_VISIBLE,WS_CLIPSIBLINGS} )

-- Create the two sub windows of the DB2 top section
global constant DB2Details = create(Window, "", DB2Top, 0, 0, 0, 0,
{WS_CHILD,WS_VISIBLE,WS_CLIPSIBLINGS} )
global constant MainLV = createEx( ListView, {}, DB2Details, 0, 0, 0, 0,
or_all({LVS_REPORT,LVS_SHOWSELALWAYS}), 0 )
removeStyle(MainLV, WS_BORDER)
-- Create a geometry control for the bottom of the DB2 tab item
global constant DB2TopGMID = xControl( Geometry, "", DB2Top, 0, 0, 0, 0, 0, 0 )
-- Split the top of the DB2 tab item
global constant DB2TopSplit = xControl( HSplitter, "", DB2Top, 0, 100, 0, 0, 0,
DB2TopGMID )
-- Create the SQL window including the statement history and sql statement
window
global constant DB2SQLStmt = create(Window, "", DB2Top, 0, 0, 0, 0,
{WS_CHILD,WS_VISIBLE,WS_CLIPSIBLINGS} )
global constant HistoryDDL = createEx( DropDownList, "", DB2SQLStmt, 0, 0, 0, 0,
0, 0 )
removeStyle(HistoryDDL, WS_BORDER)
global constant StatementRE = createEx( RichEdit, "", DB2SQLStmt, 0, 0, 0, 0,
or_all({ES_NOHIDESEL}), 0 )
removeStyle(StatementRE, WS_BORDER)

-- Create the results list view
global constant ResultsLV = createEx( ListView, {}, DB2Bottom, 0, 0, 0, 0,
or_all({LVS_REPORT,LVS_SHOWSELALWAYS}), 0 )
removeStyle(ResultsLV, WS_BORDER)

-- Create the IFS tab item
global constant IFSTI = create(TabItem, "IFS", mainRightTC, 0, 0, 0, 0, 0 )
-- Create the IFS file edit window
global constant DispEditLT = createEx( LText, "Displaying:", IFSTI, 0, 0, 0, 0,
0, 0 )
global constant IFSFileLT = createEx( LText, "", IFSTI, 0, 0, 0, 0, 0, 0 )
global constant IFSRE = createEx( RichEdit, "", IFSTI, 0, 0, 0, 0,
w32or_all({ES_NOHIDESEL,ES_AUTOHSCROLL,WS_HSCROLL}), 0)
-- Set a large buffer maximum for the IFS file edit control
integer IDEok
IDEok=sendMessage( IFSRE,197,9999999,0)

-- Set some extended styles for the list views in the main window
atom lvMask
integer lvOk
lvMask = or_all({LVS_EX_ONECLICKACTIVATE})
lvOk = sendMessage(MainLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_FULLROWSELECT})
lvOk = sendMessage(MainLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_HEADERDRAGDROP})
lvOk = sendMessage(MainLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_GRIDLINES})
lvOk = sendMessage(MainLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_ONECLICKACTIVATE})
lvOk = sendMessage(ResultsLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_FULLROWSELECT})
lvOk = sendMessage(ResultsLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_HEADERDRAGDROP})
lvOk = sendMessage(ResultsLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)
lvMask = or_all({LVS_EX_GRIDLINES})
lvOk = sendMessage(ResultsLV,LVM_SETEXTENDEDLISTVIEWSTYLE,lvMask,lvMask)

-- Create buttons in the toolbar
global constant OpenPB = createEx( PictureButton, "", MainTB, 0, 0, 30, 30, 0, 0
)
setHint( OpenPB,"Open a specific file")
global constant SavePB = createEx( PictureButton, "", MainTB, 30, 0, 30, 30, 0,
0 )
setHint( SavePB,"Save the results of the SQL statement")
global constant ExecutePB = createEx( PictureButton, "", MainTB, 60, 0, 30, 30,
0, 0 )
setHint( ExecutePB,"Run the SQL statement")
global constant ClearHistPB = createEx( PictureButton, "", MainTB, 90, 0, 30,
30, 0, 0 )
setHint( ClearHistPB,"Clear the SQL history log")
global constant RefreshPB = createEx( PictureButton, "", MainTB, 120, 0, 30, 30,
0, 0 )
setHint( RefreshPB,"Refresh selected entry")
global constant ExitPB = createEx( PictureButton, "", MainTB, 154, 0, 30, 30, 0,
0 )
setHint( ExitPB,"Exit the program")

-- Now we'll work on managing the size/placement of the controls on the main
window
global constant MainLS = xControl( LimitSize, "", Main, 400, 400, 0, 0, 0, 0 ),
      mainLeftGMID = xControl( Geometry, "", mainLeft, 0, 0, 0, 0, 0, 0 ),
      DB2BottomGMID = xControl( Geometry, "", DB2Bottom, 0, 0, 0, 0, 0, 0 ),
      DB2DetailsGMID = xControl( Geometry, "", DB2Details, 0, 0, 0, 0, 0, 0 ),
      DB2SQLStmtGMID = xControl( Geometry, "", DB2SQLStmt, 0, 0, 0, 0, 0, 0 )

      manage(MainGMID, MainTB, {0, 0}, {0, 0}, {1, 0}, {0, 34})
      manage(MainGMID, mainLeft, {0,5}, {0,5}, {mainSplit,0}, {1.0,0})
      manage(MainGMID, mainRightTC, {mainSplit,0}, {0,5}, {1.0,-5}, {1.0,-15})
      manage(mainLeftGMID, MainTV, {0, 0}, {0, 0}, {1.0,0}, {1.0,-5} )
      manage(mainRightTCGMID, DB2Top, {0,0}, {0,0}, {1,-5}, {DB2Split,0})
      manage(mainRightTCGMID, DB2Bottom, {0,0}, {DB2Split,0}, {1,-5}, {1,0})
      manage(DB2TopGMID, DB2Details, {0,0}, {0,0}, {1.0,0}, {DB2TopSplit,0})
      manage(DB2TopGMID, DB2SQLStmt, {0,0}, {DB2TopSplit,0}, {1.0,0}, {1.0,0})
      manage(DB2DetailsGMID, MainLV, {0,0}, {0, 0}, {1, -5}, {1.0, 0})
manage(DB2SQLStmtGMID, HistoryDDL, {0, 0}, {0, 0}, {1, 0}, {HistoryDDL,
      120})
      manage(DB2SQLStmtGMID, StatementRE, {0, 0}, {0, 25}, {1, 0}, {1, 0})
      manage(DB2BottomGMID, ResultsLV, {0, 0}, {0, 0}, {1, 0}, {1.0, -5})
manage(mainRightTCGMID, DispEditLT, {0,5}, {0,5},
      {DispEditLT,104},{DispEditLT,24})
manage(mainRightTCGMID, IFSFileLT, {DispEditLT,5}, {0,5},
      {1,-5},{IFSFileLT,24})
      manage(mainRightTCGMID, IFSRE, {0,0}, {DispEditLT,5}, {1,0}, {1,-5})
      
WinMain( Main, Maximized )


Jonas Temple
http://www.yhti.net/~jktemple

new topic     » topic index » view message » categorize

2. Re: Greg Haberek - xControls - redraw issue in a complicated window?

> Greg,

Hello!

> Hopefully you're still around...and still working on xControls!

Still here. Still actively programming. xControls is on again/off again.

> I've got a program with multiple windows with size/placement handled by x=
Controls.  The attached program shows what the UI should look like.  The pr=
oblem is when the vertical splitter is moved the controls under the "DB2" t=
ab disappear.  They re-appear when the "IFS" tab is selected.

ACTUALLY, if you move the HSplitter in the DB2 tab, you'll see the
bottom ListView disappear. So this appears to be an issue with
resizing the HSplitter, which is triggered when you move the VSplitter
or the HSplitter itself. There appears to be a math error somewhere,
since moving the HSplitter doesn't result in the proper position.
Plus, I've always had issues with ListViews choosing to misbehave when
resized.

> Am I doing something wrong or is this a limitation of xControls?

No, you are entirely correct. I'm currently porting all the xControls
over to Win32Lib built-in controls, since I've pretty much cracked
Derek's secret feature. :) He tells me he'll be changing it, but no
matter. There are some issues with xControls I'd like to work out.
I've already turned Geometry and LimitSize into libraries, rather than
controls, since they were never really "controls" to begin with.

Your issue as added a little fuel to the fire under my ass on this
project. I'll work on it and see what I can do. Thanks for finding the
first xControls bug under my watch! :)

~Greg

new topic     » goto parent     » topic index » view message » categorize

3. Re: Greg Haberek - xControls - redraw issue in a complicated window?

Greg Haberek wrote:
> Hello!

Hello back at ya'!

> 
> > Hopefully you're still around...and still working on xControls!
> 
> Still here. Still actively programming. xControls is on again/off again.

That's good news.

> 
> ACTUALLY, if you move the HSplitter in the DB2 tab, you'll see the
> bottom ListView disappear. 

Odd, I don't see that behavior on my system.  I can move either of the
HSplitters under the DB2 tab and they resize fine without any loss of visibility.

> 
> > Am I doing something wrong or is this a limitation of xControls?
> 
> No, you are entirely correct. 

Phew!  I thought I was going nuts.

> I'm currently porting all the xControls
> over to Win32Lib built-in controls, since I've pretty much cracked
> Derek's secret feature. :) He tells me he'll be changing it, but no
> matter. There are some issues with xControls I'd like to work out.
> I've already turned Geometry and LimitSize into libraries, rather than
> controls, since they were never really "controls" to begin with.

Sounds interesting.

> 
> Your issue as added a little fuel to the fire under my ass on this
> project. I'll work on it and see what I can do. Thanks for finding the
> first xControls bug under my watch! :)

No problem, glad to "help out" and thanks for the quick reply!

Jonas Temple
http://www.yhti.net/~jktemple

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu