If I explicitly position / size a scrollPane (ick!) I can use the title bar of its window to drag the window, if I make the scrollPane smaller still then I can also then resize the window.
However, as the window is resizeable I need to set the scrollPane fill its parent (presumably) - this then means when I start to drag the window with the title bar it starts to move but then stops and the scrollPane starts scrolling instead.
Despite padding on the window (which looks visually correct) there is still an issue with the title bar and moving the window.
Resizing is worse because at first it tries to dropdown a selector inside the scrollPane then it starts resizing the table and then it starts scrolling the scrollPane!
The widgets are laid out thus:
window
scrollPane
table
I have tried padding / setting sizes on different widgets but nothing seems to work when the window is resizable...
to recap I'm looking to make a resizeable re-positionable window with a scrollPane inside it that changes size when the window does but doesn't effect resizing or repositioning of the window.
Turns out I should have added the scrollPane with add and not addActor, jeese I wish there were better info in the javadocs!
NOPE! thats not it either, the pane is stuck to the right size of the window
v.frustrating
finally!
sPane.setFillParent(true);
win.add(sPane).fill().expand();
still no idea from the API doc's or Wiki if this is how you're supposed to use it...
Related
I'm working on a GTK program in Rust (someone can probably answer this if they don't know Rust, as I can figure out how to translate between different bindings and the native C API) via the gtk-rs bindings for which I want to have a non-editable TextView who's contents are constantly updated in my code. I want the user to be able to resize the TextView to any size, after which my code will re-calculate its contents accordingly. Unfortunately, GTK prevents any resize from taking place that would hide any contents that are current in the TextView. I can't use a ScrolledWindow because I don't want visible scrollbars, and disabling the scrollbars on a ScrolledWindow prevents the resizing behavior that I want. I also tried calling set_size_request to set the size to both 1, 1, and 0, 0 after every text change, but this does not change the behavior at all either — the user still can't properly resize the TextView (by resizing the window).
How can I enable the resizing behavior that I want?
Probably this is not possible. What would be the point of resizing the text view smaller, if the user can never see the text that is outside of the viewport because you don't want scrollbars? That seems like it would confound the user's expectation of how such a component would usually work.
Maybe an approach could be that you pick a certain number of lines to show, make that the size of the viewport, and delete the old contents of the text view that scroll outside of the viewport?
I have an NSCollectionView with a vertical NSCollectionViewFlowLayout. I display rectangular icons in it.
I also have a slider in the UI, and when that changes, I adjust the minItemSize, which I then use in collectionView:itemForRepresentedObjectAtIndexPath: to create an equally sized NSImageView to the returned NSCollectionViewItem's imageView. Then I reload the view by invoking reloadData.
After that, the view shows the icons in the new size as intended.
The problem is, provided I have more data to show than fits into the current scoll view, that when the General System Preferences are set to Show scroll bars: When scrolling, the scrollbar disappears after reloading the collection view, and trying to scroll with the trackpad leads to a bounce that's telling me that the scroll view thinks that the content is just what's visible, nothing more to scroll.
But as soon as I resize the window, which also resizes the collection view inside, the scrollbars come back.
Curiously, if the System Prefs are set to Show scroll bars: Always, then the issue does not appear and the scrolling always works, and the scrollbars always remain visible.
I've tried a lot of things to trigger the re-calculation of the scroll view, such as invalidating the layout of the collection view's layout, the scroll view itself, its content view, and also tried to set their needsLayout to true. Nothing makes this work.
Update: The potential duplicate (NSCollectionView does not scroll items past initial visible rect), neither the collectionView.setFrameSize: nor the window.setFrame: suggestions work for my case (I tried adding these line before and after reloadData).
Even if I force a resize of the window like this, it doesn't bring the scrollbars back, only a manual dragging of the window edges does:
[self.collectionView.window setFrame:NSInsetRect(self.view.window.frame, 1, 1) display:YES];
Also note that in my case, initially the scrolling works, just not after resizing and reloading.
Another finding: When I call selectItemsAtIndexPaths:scrollPosition: after reloadData, then the scrollbar comes back. But only if I pass a non-empty NSSet for the paths. And since I may not have selected any items, this isn't a permanent solution.
If no other ideas come up, I'll try to make a demo project.
I've solved it:
I had to delay the call to reloadData, e.g. by calling it from within the block code of dispatch_async(dispatch_get_main_queue(), ^{ ... });
Before the fix, I did call reloadData right from the setSliderValue: handler, which is bound to the slider's value. It appears that this didn't go well together.
How would i go about removing the thin border around the edges of the Progress-bar tool? There doesn't seem to be any properties to change the style. It looks like the default 3d border.
It is not the best solution from a programmatically correct point of view, but it works and is an easy solution.
You create a Panel control
You put the BorderStyle property of the Panel to None
You moove your Progress Bar inside the Panel control
You rezise the Panel and the Progress Bar so that dimension of the Progress Bar is a few pixels larger than the dimension of the Panel control. This way, when the controls are drawn, the borders of the Progress Bar do not show because they are outside of Panel control
You set the Anchors property of the Progress Bar to Left, Right, Top and Bottom so that when you rezise the Panel control, the Progress Bar inside resizes well.
You resize and place your Panel where you need it (and the Progress Bar will resize well into it)
And your done. As I said, it is not a nice solution from a programmation point of view, but overall it works well and allow you to do what you want without spending too much time.
I have a subclass of wxPanel inside a toplevel window with a couple of levels of wxSplitter above it. When the window is shown the some resizing and layout takes place. When it finishes the background of my panel has random junk (either black or other parts of the window) over some of its background. This seems to be a bug as it's using the bliting that is typically used to speed up scrolling, except that it's bliting from a location that doesn't belong to that panel.
Anyway, I figure I can fix it by making the window always repaint on resize and always draw the full contents of the wxPanel without any blitting. So: Is there any way to make it so the background of the wxPanel is always redrawn in full?
You can try wxFULL_REPAINT_ON_RESIZE style for your panel, see wxWindow docs.
Another way is to catch wxEVT_SIZE and call Refresh() for the relevant panel (and maybe even Update() after it although be careful as this will become a rather expensive op).
I've a window with a horizontal split view. On the bottom pane of the split view, I have a nssegmentedcontrol, aligned to the center. On the bottom of the nssegmentedcontrol I have 5 tabs that are controlled by the segmented control - click in one of the cells and the corresponding tab opens.
My problem is, if I completely minimize the bottom pane, to the point where the dividing line touches the bottom of the window, the segmented control gets pushed on top of the table header and never goes back to its original place.
I've tried fiddling with IB to get this to work, but no luck. Has anyone experienced this?
Following what's on the comments, I replaced the default split view with the one found in BWToolkit that allows for the definition of minimum and maximum height of each view.
BWTookit is a no go, the framework leakes a lot.
You should use RBSplitView (google it), it also gives you option for min and max height
and I started using it because of a bug in the split view as well, I used it for a chat window
but the split view didn't autosave as it should, every time it got like 2px smaller,
RBSplitView is great, and doesn't leak.