How can I make a GtkTreeView work with a vertical scrollbar in Glade3? - gtk

I'm using glade 3, to create TreeView and successfully added row as algorithm done, but I had a little issue because treeview will add new row, thus my "GUI" will getting longer to the below, how could I add the scrollbar for this TreeView? in order to make my "GUI" not getting any longer?
Note: I have added "a new adjustment" and connected it for TreeView and ScrollBar vertical as well, but still not get the job done.
any idea?

Try putting your TreeView into a GtkScrolledWindow. E.g.:
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTreeView" id="items_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">list_items</property>
</object>
</child>
</object>
</child>

Related

How to avoid row splitting for jasper-report excel export

I'm trying to create Jasper Report with 2 tables in Detail band and export it into 3 formats (PDF, DOCX and XLS), and there is an issue with 2nd table when exporting to XLS:
The table's row may take the height of 2 pages (last column field's content can be really large). So for DOCX and PDF formats it is totally okay that the export result has 2 pages containing similar row with the only difference in the last column value - first and second part of the column value after splitting. I am using pagination for this formats.
In XLS file such behavior is confusing - first column value is logically unique, but because of splitting it contains 2 lines in a row with the same 'unique' value. I set this property to avoid pagination for this format:
<property name="net.sf.jasperreports.export.xls.paginated" value="false"/>
The result looks like this:
duplicate for split row
I would like to join this to rows values. Maybe there is a way to merge such rows specially in XLS format. Please, help to find a workaround.
My report level properties are:
<property name="net.sf.jasperreports.export.xls.exclude.origin.keep.first.band.1" value="pageHeader"/>
<property name="net.sf.jasperreports.export.xls.exclude.origin.keep.first.band.2" value="columnHeader"/>
<property name="net.sf.jasperreports.export.xls.exclude.origin.band.2" value="pageFooter"/>
<property name="net.sf.jasperreports.export.xls.remove.empty.space.between.rows" value="true"/>
<property name="net.sf.jasperreports.export.xls.remove.empty.space.between.columns" value="true"/>
<property name="net.sf.jasperreports.export.xls.exclude.key.padding"/>
<property name="net.sf.jasperreports.export.xls.exclude.key.pages"/>
<property name="net.sf.jasperreports.export.xls.collapse.row.span" value="false"/>
<property name="net.sf.jasperreports.export.xls.collapse.column.span" value="false"/>
<property name="net.sf.jasperreports.export.xls.white.page.background" value="false"/>
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
<property name="net.sf.jasperreports.export.xls.ignore.cell.border" value="false"/>
<property name="net.sf.jasperreports.export.xls.font.size.fix.enabled" value="true"/>
<property name="net.sf.jasperreports.print.keep.full.text" value="true"/>
<property name="net.sf.jasperreports.consume.space.on.overflow" value="true"/>
<property name="net.sf.jasperreports.export.xls.paginated" value="false"/>
<property name="net.sf.jasperreports.export.docx.frames.as.tables" value="false"/>
Properties for the last column text field:
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/>
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/>
<property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/>
Thanks in advance!
Set Detail band property "Split Type" to "Prevent"
https://community.jaspersoft.com/wiki/set-detail-band-property-split-type-prevent

Understanding CQ5 Lucene indexing rule

Information:
I have provided an indexing configuration file to cq5. I have not indexed on the property cq:template by specifying the following rule:
<index-rule nodeType="nt:base">
<property nodeScopeIndex="false">cq:template</property>
</index-rule>
I rebuilt the index.The logs show re-indexing is properly done.
The problem I am facing:
When I execute the following SQL2 query, it gives me the same results as it would give without the above indexing rule:
SELECT s.[cq:template] FROM [nt:base] AS s WHERE s.[cq:template] like '/apps/geometrixx/templates/contentpage'
Your rule actually omits all properties from the index except for cq:template rule (and excludes cq:template from the fulltext index because you defined nodeScopeIndex="false"). See the jackrabbit documentation for more details.
When you define the element <property nodeScopeIndex="false">cq:template</property>, the system includes the property in the index. However, nodeScopeIndex="false" tells CRX/Jackrabbit not to include the property in the fulltext index. Meaning it would be available for all searches except for those using contains(...) in sql or jcr:contains(...) for xpath.
To avoid indexing a property entirely, omit it from the first index-rule with nodeType/condition attributes that match its node. It must be the first matching rule because the rules in index_config.xml file are processed top down.
So to remove the cq:template property from the index in CQ5, do the following:
Extract the out of the box CQ5 version of indexing_config.xml (See this documentation for instructions)
Remove the <property nodeScopeIndex="false">cq:tempate</property> from <index-rule nodeType="nt:base">
Change the regular expression in the last rule <property isRegexp="true"> from .*:.* to ^(?!cq:template).*:.*$:
After you make the changes, the index-rule should look like this:
<index-rule nodeType="nt:base">
<property nodeScopeIndex="false">analyticsProvider</property>
<property nodeScopeIndex="false">analyticsSnippet</property>
<property nodeScopeIndex="false">hideInNav</property>
<property nodeScopeIndex="false">offTime</property>
<property nodeScopeIndex="false">onTime</property>
<property nodeScopeIndex="false">cq:allowedTemplates</property>
<property nodeScopeIndex="false">cq:childrenOrder</property>
<property nodeScopeIndex="false">cq:cugEnabled</property>
<property nodeScopeIndex="false">cq:cugPrincipals</property>
<property nodeScopeIndex="false">cq:cugRealm</property>
<property nodeScopeIndex="false">cq:designPath</property>
<property nodeScopeIndex="false">cq:isCancelledForChildren</property>
<property nodeScopeIndex="false">cq:isDeep</property>
<property nodeScopeIndex="false">cq:lastModified</property>
<property nodeScopeIndex="false">cq:lastModifiedBy</property>
<property nodeScopeIndex="false">cq:lastPublished</property>
<property nodeScopeIndex="false">cq:lastPublishedBy</property>
<property nodeScopeIndex="false">cq:lastReplicated</property>
<property nodeScopeIndex="false">cq:lastReplicatedBy</property>
<property nodeScopeIndex="false">cq:lastReplicationAction</property>
<property nodeScopeIndex="false">cq:lastReplicationStatus</property>
<property nodeScopeIndex="false">cq:lastRolledout</property>
<property nodeScopeIndex="false">cq:lastRolledoutBy</property>
<property nodeScopeIndex="false">cq:name</property>
<property nodeScopeIndex="false">cq:parentPath</property>
<property nodeScopeIndex="false">cq:segments</property>
<property nodeScopeIndex="false">cq:siblingOrder</property>
<property nodeScopeIndex="false">cq:template</property>
<property nodeScopeIndex="false">cq:trigger</property>
<property nodeScopeIndex="false">cq:versionComment</property>
<property nodeScopeIndex="false">jcr:createdBy</property>
<property nodeScopeIndex="false">jcr:lastModifiedBy</property>
<property nodeScopeIndex="false">sling:alias</property>
<property nodeScopeIndex="false">sling:resourceType</property>
<property nodeScopeIndex="false">sling:vanityPath</property>
<property isRegexp="true">^(?!cq:template).*:.*$</property>
</index-rule>
Note of warning:
I'm not sure if it is safe to remove cq:template from the search index as the product code may use it in some way. As a best practice, it is recommended to only exclude custom application properties. Also, you must include properties in the fulltext index which contain references to other content paths. This is because when you move a page in CQ5 (AEM) then it does a jcr:contains search to see where that page is referenced. So if you exclude such properties with nodeScopeIndex="false" or by modifying the regular expression above to omit them then the reference search will fail. Then you end up with stale references to old paths.
References:
Official indexing_config.xml reference: http://wiki.apache.org/jackrabbit/IndexingConfiguration
Instructions on how to update indexing_config.xml in CQ5: http://helpx.adobe.com/experience-manager/kb/SearchIndexingConfig.html

Spring.net - PropertyRetrievingFactoryObject - property is null

In an attempt to resolve this question, I'm taking a look at how our spring.net configuration works.
The root problem comes from this snippet:
<object name="someObject" singleton="false" type="SomeType.someObject, SomeAssembly">
<constructor-arg name="authSession">
<object type="Spring.Objects.Factory.Config.PropertyRetrievingFactoryObject, Spring.Core">
<property name="TargetObject" ref="AuthSessionManager" />
<property name="TargetProperty" value="CurrentAuthSession" />
</object>
</constructor-arg>
</object>
In a case where a user is not logged in, AuthSessionManager.CurrentAuthSession will be null. When that is the case, Spring.NET throws an exception: "Factory object returned null object".
How can I tell Spring that the null object is acceptable in this case?
You can use an expression to retrieve an object from the spring context in your constructor argument, something like:
<object name="someObject" singleton="false"
type="SomeType.someObject, SomeAssembly">
<constructor-arg name="authSession"
expression="#(AuthSessionManager).CurrentAuthSession" />
</object>
Expressions are allowed to evaluate to null, so you don't have to tell Spring anything.
This worked for me in a simple case (no nested contexts).

Why is the first toolbar button automatically selected when my gtk application loads?

When my gtk application loads, the first item on the toolbar is automatically selected (it is highlighted, it is pressed when it hit enter). This is just a minor problem, but I would prefer for nothing to be selected by default.
Here is some basic sample code:
import gtk
import gtk.glade
window_tree = gtk.glade.XML('testtoolbar.glade')
gtk.main()
testtoolbar.glade
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="window1">
<property name="width_request">200</property>
<property name="visible">True</property>
<child>
<widget class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
<child>
<widget class="GtkToolButton" id="toolbutton1">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton1</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-new</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<widget class="GtkToolButton" id="toolbutton2">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton2</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-open</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
This is probably just GTK+ handing the focus to some widget, it likes to have a widget focused if possible.
You can use grab_focus() to move the focus elsewhere, to get the desired behavior. If the toolbar is all the widgetry you have, it might be hard to find a suitable focus "target", though.
gtk.ToolButton inherits gtk.Bin.
gtk.Bin is an abstract base class defining a widget that is a container with just one child.
So button is a container and
btn.set_can_focus(False)
will not work.
You need
btn.set_focus_chain([])
or for every button in toolbar
toolbar.foreach(lambda x: x.set_focus_chain([]))
You can always add a widget and make it invisible, and transfer focus to it. Though I don't really find this to be an issue or know of anyone else who did.
It has focus because it is the 1st widget in your app. If you use glade, you can set "Has focus" to 'Yes' to any other widget and the toolbar will automatically lose focus on startup.

Property Inject an Array with Spring.Net

I've been using the Spring.Net IoC container and can use it to inject properties that are of type IList and even IList<T> but I'm a bit stumped as to how to inject a property thats of type string[].
There doesn't seem to be an <array> element defined in the XSD's and using <list> <value> </list> doesn't work either.
If anyone could post the xml I need to inject using an array for a property it'd be much appreciated
As mentioned here in the documentation you can inject a string array as a comma delimited string (not sure what the syntax is for escaping actual commas in strings if necessary). In other words your config would look something like this:
<object id="MyObject" type="Blah.SomeClass, Blah" >
<property name="StringArrayProperty" value="abc,def,ghi" />
</object>
Manually constructing a string[] with the following syntax also works, if you need something more complex (for example if you're looking the individual values up from some other reference rather than hard coding them):
<object id="TestStrArr" type="string[]" >
<constructor-arg value="3" />
<property name="[0]" value="qwe" />
<property name="[1]" value="asd" />
<property name="[2]" value="zxc" />
</object>
<object id="MyObject" type="Blah.SomeClass, Blah" >
<property name="StringArrayProperty" ref="TestStrArr" />
</object>