2018-01-25 23:13:36 +00:00
|
|
|
|
// This is free and unencumbered software released into the public domain.
|
|
|
|
|
// Happy coding!!! - GtkSharp Team
|
|
|
|
|
|
|
|
|
|
using Gtk;
|
2018-01-23 14:15:17 +00:00
|
|
|
|
|
|
|
|
|
namespace Samples
|
|
|
|
|
{
|
|
|
|
|
[Section(Name= "Entry", Category = Category.Widgets)]
|
|
|
|
|
class EntrySection : ListSection
|
|
|
|
|
{
|
|
|
|
|
public EntrySection()
|
|
|
|
|
{
|
|
|
|
|
AddItem(CreateSimpleEntry());
|
|
|
|
|
AddItem(CreateSimpleRightAlignedTextEntry());
|
|
|
|
|
AddItem(CreateMaxLimitEntry());
|
|
|
|
|
AddItem(CreatePlaceholderEntry());
|
|
|
|
|
AddItem(CreateInvisibleCharEntry());
|
2018-01-25 23:43:55 +00:00
|
|
|
|
AddItem(CreateCustomActionsEntry());
|
|
|
|
|
AddItem(CreateProgressEntry());
|
|
|
|
|
AddItem(CreateCompletionEntry());
|
2018-01-23 14:15:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateSimpleEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry("Initial Text");
|
|
|
|
|
entry.TooltipText = "This is the tooltip!";
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => ApplicationOutput.WriteLine(sender, "Changed");
|
|
|
|
|
|
|
|
|
|
return ("Simple entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateSimpleRightAlignedTextEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry("Text is Right Aligned");
|
|
|
|
|
entry.Xalign = 1f;
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => ApplicationOutput.WriteLine(sender, "Changed");
|
|
|
|
|
|
|
|
|
|
return ("Right aligned text entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateMaxLimitEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry("123");
|
|
|
|
|
entry.MaxLength = 3;
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => ApplicationOutput.WriteLine(sender, "Changed");
|
|
|
|
|
|
|
|
|
|
return ("Text length limited entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreatePlaceholderEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry();
|
|
|
|
|
entry.PlaceholderText = "Please fill with information";
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => ApplicationOutput.WriteLine(sender, "Changed");
|
|
|
|
|
|
|
|
|
|
return ("Placeholder text entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateInvisibleCharEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry("Invisible text entry");
|
|
|
|
|
entry.Visibility = false;
|
|
|
|
|
entry.InvisibleChar = '\u2022';
|
|
|
|
|
entry.InvisibleCharSet = true;
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => ApplicationOutput.WriteLine(sender, "Changed");
|
|
|
|
|
|
|
|
|
|
return ("Invisible text entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-25 23:43:55 +00:00
|
|
|
|
public (string, Widget) CreateCustomActionsEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry();
|
|
|
|
|
entry.PlaceholderText = "Search";
|
|
|
|
|
entry.SetIconFromIconName(EntryIconPosition.Primary, "edit-find-symbolic");
|
|
|
|
|
entry.SetIconFromIconName(EntryIconPosition.Secondary, "edit-clear-symbolic");
|
|
|
|
|
|
|
|
|
|
entry.IconRelease += (o, args) =>
|
|
|
|
|
{
|
|
|
|
|
switch (args.P0)
|
|
|
|
|
{
|
|
|
|
|
case EntryIconPosition.Primary:
|
|
|
|
|
ApplicationOutput.WriteLine(o, "Clicked Search Icon");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
entry.Text = string.Empty;
|
|
|
|
|
ApplicationOutput.WriteLine(o, "Clicked Clear Icon");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return ("Custom actions entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateProgressEntry()
|
|
|
|
|
{
|
|
|
|
|
var entry = new Entry();
|
|
|
|
|
entry.PlaceholderText = "Progress Entry";
|
|
|
|
|
entry.ProgressFraction = 0f;
|
|
|
|
|
entry.MaxLength = 20;
|
|
|
|
|
|
|
|
|
|
entry.Changed += (sender, e) => entry.ProgressFraction = (float)entry.Text.Length / entry.MaxLength;
|
|
|
|
|
|
|
|
|
|
return ("Progress entry:", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (string, Widget) CreateCompletionEntry()
|
|
|
|
|
{
|
|
|
|
|
// create completion object and assign it to entry
|
|
|
|
|
var completion = new EntryCompletion();
|
|
|
|
|
var entry = new Entry();
|
|
|
|
|
entry.Completion = completion;
|
|
|
|
|
|
|
|
|
|
// create values store
|
|
|
|
|
var store = new ListStore(typeof(string));
|
|
|
|
|
store.AppendValues("An example to search for");
|
|
|
|
|
store.AppendValues("Better example");
|
|
|
|
|
store.AppendValues("Better and bigger example");
|
|
|
|
|
store.AppendValues("Some other example");
|
|
|
|
|
|
|
|
|
|
// create tree column
|
|
|
|
|
var column = new TreeViewColumn();
|
|
|
|
|
column.Reorderable = false;
|
|
|
|
|
column.SortIndicator = false;
|
|
|
|
|
column.Clickable = true;
|
|
|
|
|
column.SortColumnId = 0;
|
|
|
|
|
|
|
|
|
|
// create cells
|
|
|
|
|
var cell = new CellRendererText();
|
|
|
|
|
column.PackStart(cell, true);
|
|
|
|
|
|
|
|
|
|
// set cell functions
|
|
|
|
|
column.SetCellDataFunc(cell, (TreeViewColumn tree_column, CellRenderer cellRenderer, ITreeModel tree_model, TreeIter iter) =>
|
|
|
|
|
{
|
|
|
|
|
var m = tree_model.GetValue(iter, 0);
|
|
|
|
|
(cellRenderer as CellRendererText).Text = (string)m;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// model filter
|
|
|
|
|
var filter = new TreeModelFilter(store, null);
|
|
|
|
|
filter.VisibleFunc = (model, iter) =>
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(entry.Text))
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
var o = model.GetValue(iter, 0);
|
|
|
|
|
var searchString = o as string;
|
|
|
|
|
if (!string.IsNullOrEmpty(searchString))
|
|
|
|
|
{
|
|
|
|
|
if (searchString.StartsWith(entry.Text, System.StringComparison.InvariantCultureIgnoreCase))
|
|
|
|
|
return true;
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// assign treemodel as the completion
|
|
|
|
|
completion.Model = filter;
|
|
|
|
|
completion.TextColumn = 0;
|
|
|
|
|
|
|
|
|
|
return ("Completion Entry:",entry);
|
|
|
|
|
}
|
2018-01-23 14:15:17 +00:00
|
|
|
|
}
|
|
|
|
|
}
|