On Thu, 18 Oct 2018 19:46:43 +0200, Mike Wey wrote:
On 10/18/18 9:37 AM, aedt wrote:
Okay, I have this ListStore called StorageLS that is supposed to have columns for name, capacity, usage and a GtkProgressBar that visualizes the space usage. Now I want to create a ListStore but the gtkc.gobjectypes: GType
enum does not seem to have anything for it. I'm stuck.
... Code ...
How should I proceed?
Most classes have a getType
function to get their GType, so for the
GType of a gtk.ProgressBar you would use: ProgressBar.getType()
.
You can also look at gtk.CellRendererProgress
if you want to display a
progress bar in a tree or list.
Thanks that worked but now I'm stuck with another problem. How can I construct a TreeViewColumn that renders a CellRendererProgress? I can't find a proper constructor for it. Here's what I got
public enum Columns {
id,
deviceName,
capacityGB,
usedGB,
usageBar
}
class StorageLS : ListStore {
public:
this() {
// uint id, in string deviceName, double capacityGB, double usedGB
// construct a ListStore with corresponding GTypes
// note that the last item in the array is for a derived item, usageBar
super([GType.UINT, GType.STRING, GType.DOUBLE, GType.DOUBLE, (new ProgressBar()).getType()]);
}
void addStorage(uint id, in string deviceName, double capacityGB, double usedGB) {
TreeIter iter = this.createIter(); // base ListStore.createIter()
this.setValue(iter, Columns.id, id); // base ListStore.setValue()
this.setValue(iter, Columns.deviceName, deviceName);
this.setValue(iter, Columns.capacityGB, capacityGB);
this.setValue(iter, Columns.usedGB, usedGB);
this.setValue(iter, Columns.usageBar, () {
auto pb = new ProgressBar();
pb.setFraction(usedGB / capacityGB);
return pb;
}());
}
}
class StorageTV : TreeView {
import gtk.TreeViewColumn : TreeViewColumn;
private:
TreeViewColumn idCol, deviceNameCol, capacityGBCol, usedGBCol, usageBarCol;
public:
this(ref StorageLS storageListModel) {
populate(storageListModel);
}
this() {
}
public void populate(ref StorageLS storageListModel) {
import gtk.CellRendererText : CellRendererText;
import gtk.CellRendererProgress : CellRendererProgress;
idCol = new TreeViewColumn("ID", new CellRendererText(), "text", Columns.id);
deviceNameCol = new TreeViewColumn("Device", new CellRendererText(),
"text", Columns.deviceName);
capacityGBCol = new TreeViewColumn("Capacity (GB)",
new CellRendererText(), "text", Columns.capacityGB);
usedGBCol = new TreeViewColumn("Used space (GB)",
new CellRendererText(), "text", Columns.usedGB);
usageBarCol = new TreeViewColumn("Usage", crp,
"what goes here? And how am I supposed to know?", Columns.usageBar);
this.appendColumn(idCol);
this.appendColumn(deviceNameCol);
this.appendColumn(capacityGBCol);
this.appendColumn(usedGBCol);
this.appendColumn(usageBarCol);
this.setModel(storageListModel);
}