mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-12-24 18:55:40 +00:00
add demo icon view
svn path=/trunk/gtk-sharp/; revision=43422
This commit is contained in:
parent
3ebf6e3e30
commit
f78826e7ac
158
sample/GtkDemo/DemoIconView.cs
Normal file
158
sample/GtkDemo/DemoIconView.cs
Normal file
|
@ -0,0 +1,158 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using Gtk;
|
||||
|
||||
namespace GtkDemo
|
||||
{
|
||||
[Demo ("Icon View", "DemoIconView.cs")]
|
||||
public class DemoIconView : Window
|
||||
{
|
||||
const int COL_PATH = 0;
|
||||
const int COL_DISPLAY_NAME = 1;
|
||||
const int COL_PIXBUF = 2;
|
||||
const int COL_IS_DIRECTORY = 3;
|
||||
|
||||
DirectoryInfo parent = new DirectoryInfo ("/");
|
||||
Gdk.Pixbuf dirIcon, fileIcon;
|
||||
ListStore store;
|
||||
ToolButton upButton;
|
||||
|
||||
public DemoIconView () : base ("Gtk.IconView demo")
|
||||
{
|
||||
SetDefaultSize (650, 400);
|
||||
DeleteEvent += new DeleteEventHandler (OnWinDelete);
|
||||
|
||||
VBox vbox = new VBox (false, 0);
|
||||
Add (vbox);
|
||||
|
||||
Toolbar toolbar = new Toolbar ();
|
||||
vbox.PackStart (toolbar, false, false, 0);
|
||||
|
||||
upButton = new ToolButton (Stock.GoUp);
|
||||
upButton.IsImportant = true;
|
||||
upButton.Sensitive = false;
|
||||
toolbar.Insert (upButton, -1);
|
||||
|
||||
ToolButton homeButton = new ToolButton (Stock.Home);
|
||||
homeButton.IsImportant = true;
|
||||
toolbar.Insert (homeButton, -1);
|
||||
|
||||
// FIXME: use the real icons later
|
||||
fileIcon = Gdk.Pixbuf.LoadFromResource ("MonoIcon.png");
|
||||
dirIcon = Gdk.Pixbuf.LoadFromResource ("MonoIcon.png");
|
||||
|
||||
ScrolledWindow sw = new ScrolledWindow ();
|
||||
sw.ShadowType = ShadowType.EtchedIn;
|
||||
sw.SetPolicy (PolicyType.Automatic, PolicyType.Automatic);
|
||||
vbox.PackStart (sw, true, true, 0);
|
||||
|
||||
// Create the store and fill it with the contents of '/'
|
||||
store = CreateStore ();
|
||||
FillStore ();
|
||||
|
||||
IconView iconView = new IconView (store);
|
||||
iconView.SelectionMode = SelectionMode.Multiple;
|
||||
|
||||
upButton.Clicked += OnUpClicked;
|
||||
homeButton.Clicked += OnHomeClicked;
|
||||
|
||||
iconView.TextColumn = COL_DISPLAY_NAME;
|
||||
iconView.PixbufColumn = COL_PIXBUF;
|
||||
|
||||
iconView.ItemActivated += new ItemActivatedHandler (OnItemActivated);
|
||||
sw.Add (iconView);
|
||||
iconView.GrabFocus ();
|
||||
|
||||
ShowAll ();
|
||||
}
|
||||
|
||||
ListStore CreateStore ()
|
||||
{
|
||||
// path, name, pixbuf, is_dir
|
||||
ListStore store = new ListStore (typeof (string), typeof (string), typeof (Gdk.Pixbuf), typeof (bool));
|
||||
|
||||
// Set sort column and function
|
||||
store.SetDefaultSortFunc (SortFunc);
|
||||
store.SetSortColumnId (COL_DISPLAY_NAME, SortType.Ascending);
|
||||
|
||||
return store;
|
||||
}
|
||||
|
||||
void FillStore ()
|
||||
{
|
||||
// first clear the store
|
||||
store.Clear ();
|
||||
|
||||
// Now go through the directory and extract all the file information
|
||||
if (!parent.Exists)
|
||||
return;
|
||||
|
||||
foreach (DirectoryInfo di in parent.GetDirectories ())
|
||||
{
|
||||
if (!di.Name.StartsWith ("."))
|
||||
store.AppendValues (di.FullName, di.Name, dirIcon, false);
|
||||
}
|
||||
|
||||
foreach (FileInfo file in parent.GetFiles ())
|
||||
{
|
||||
if (!file.Name.StartsWith ("."))
|
||||
store.AppendValues (file.FullName, file.Name, fileIcon, false);
|
||||
}
|
||||
}
|
||||
|
||||
int SortFunc (TreeModel model, TreeIter a, TreeIter b)
|
||||
{
|
||||
// sorts folders before files
|
||||
bool a_is_dir = (bool) model.GetValue (a, COL_IS_DIRECTORY);
|
||||
bool b_is_dir = (bool) model.GetValue (b, COL_IS_DIRECTORY);
|
||||
string a_name = (string) model.GetValue (a, COL_DISPLAY_NAME);
|
||||
string b_name = (string) model.GetValue (b, COL_DISPLAY_NAME);
|
||||
|
||||
if (!a_is_dir && b_is_dir)
|
||||
return 1;
|
||||
else if (a_is_dir && !b_is_dir)
|
||||
return -1;
|
||||
else
|
||||
return String.Compare (a_name, b_name);
|
||||
}
|
||||
|
||||
void OnHomeClicked (object sender, EventArgs a)
|
||||
{
|
||||
parent = new DirectoryInfo (Environment.GetFolderPath (Environment.SpecialFolder.Personal));
|
||||
FillStore ();
|
||||
upButton.Sensitive = true;
|
||||
}
|
||||
|
||||
void OnItemActivated (object sender, ItemActivatedArgs a)
|
||||
{
|
||||
TreeIter iter;
|
||||
store.GetIter (out iter, a.Path);
|
||||
string path = (string) store.GetValue (iter, COL_PATH);
|
||||
bool isDir = (bool) store.GetValue (iter, COL_IS_DIRECTORY);
|
||||
|
||||
if (!isDir)
|
||||
return;
|
||||
|
||||
// Replace parent with path and re-fill the model
|
||||
parent = new DirectoryInfo (path);
|
||||
FillStore ();
|
||||
|
||||
// Sensitize the up button
|
||||
upButton.Sensitive = true;
|
||||
}
|
||||
|
||||
void OnUpClicked (object sender, EventArgs a)
|
||||
{
|
||||
parent = parent.Parent;
|
||||
FillStore ();
|
||||
upButton.Sensitive = (parent.FullName == "/" ? false : true);
|
||||
}
|
||||
|
||||
void OnWinDelete (object sender, DeleteEventArgs a)
|
||||
{
|
||||
Hide ();
|
||||
Dispose ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ sources = \
|
|||
DemoEntryCompletion.cs \
|
||||
DemoExpander.cs \
|
||||
DemoHyperText.cs \
|
||||
DemoIconView.cs \
|
||||
DemoImages.cs \
|
||||
DemoListStore.cs \
|
||||
DemoMain.cs \
|
||||
|
|
|
@ -10,8 +10,8 @@ RotatedText
|
|||
- doesn't quite work yet
|
||||
|
||||
IconView
|
||||
- missing
|
||||
|
||||
Chang Display
|
||||
- fix icons
|
||||
|
||||
Change Display
|
||||
- missing
|
||||
|
||||
|
|
Loading…
Reference in a new issue