// This requires that the perl program autorestart wraps this.... public DialBOT() : base("DialBOT") { SetDefaultSize(800, 600); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; // Top level container. This vertically divides the window into 3 sections: // Top is the 2 windows (balls-deep items and console output VBox topvbox = new VBox(false, 5); // Lets build the top 1/3rd here. Frame ballsdeepframe = new Frame("Balls-Deep Items"); Frame consoleframe = new Frame("Console Output"); // HBox mainhbox = new HBox(true,2); ballsdeeptree = new TreeView(); bdstore = new TreeStore (typeof(string), typeof (string), typeof (string), typeof (string)); LoadBalls(); fillStore(); // Put the TreeStore into a TreeModelSort so we can sort columns... // Sort by score for now bdsorted = new TreeModelSort(bdstore); bdsorted.SetSortColumnId(1,SortType.Descending); // Put the TreeModelSort into a TreeModelFilter so we can implement the filtering filterEntry = new Entry(); // filter = new TreeModelFilter(bdsorted,null); // filter.VisibleFunc = FilterTreeFunc; // Use this as the filter function. // And then set the visible TreeView to use the filter as it's store. ballsdeeptree.Model = bdsorted; ballsdeeptree.HeadersVisible = true; ballsdeeptree.HeadersClickable=true; ballsdeeptree.AppendColumn ("Added By", new CellRendererText (), "text", 0); ballsdeeptree.AppendColumn ("Score", new CellRendererText (), "text", 1); CellRendererText ballRenderer = new CellRendererText(); ballsdeeptree.AppendColumn ("Text", ballRenderer, "text", 2); CellRendererText voteRenderer = new CellRendererText(); voteRenderer.Editable=true; voteRenderer.Edited+=editVotes; ballsdeeptree.AppendColumn ("Votes", voteRenderer, "text", 3); TreeViewColumn col = ballsdeeptree.GetColumn(0); col.Clickable=true; col.Resizable = true; col.Clicked += new EventHandler (col_clicked0); col = ballsdeeptree.GetColumn(1); col.Resizable = true; col.Clickable=true; col.Clicked += new EventHandler (col_clicked1); col = ballsdeeptree.GetColumn(2); col.Resizable = true; col.Clickable=true; col.Clicked += new EventHandler (col_clicked2); col = ballsdeeptree.GetColumn(3); col.Clickable=true; col.Resizable = true; col.Clicked += new EventHandler (col_clicked3); ScrolledWindow ballsdeepscroll = new ScrolledWindow(); ballsdeepscroll.Add(ballsdeeptree); Button deleteentry = new Button("Remove Entry"); deleteentry.SetSizeRequest(70, 30); deleteentry.Clicked += new EventHandler(deleteBallMsg); ballsdeepframe.Add(ballsdeepscroll); ballsdeepframe.Add(deleteentry); // Entry box and label to filter on message as well as an HBox to put them next to each other filterEntry.Changed += OnFilterEntryTextChanged; Label filterLabel = new Label("Ball Message Search: "); HBox filterBox = new HBox(); filterBox.PackStart(filterLabel,false,false,5); filterBox.PackStart(filterEntry,true,true,5); VBox ballvbox = new VBox(false,5); ballvbox.Add(ballsdeepframe); //ballvbox.PackStart(filterBox,false,false,1); topvbox.Add(ballvbox); consoleview = new TextView(); consolebuffer=consoleview.Buffer; consolebuffer.Text = consoletext; ScrolledWindow consolescroll = new ScrolledWindow(); consolescroll.SetPolicy(PolicyType.Automatic,PolicyType.Always); consolescroll.Add(consoleview); consoleframe.Add(consolescroll); followConsole = new CheckButton("Tail Console"); followConsole.SetSizeRequest(70,30); VBox consolevbox = new VBox(false,5); consolevbox.Add(consoleframe); consolevbox.PackStart(followConsole,false,false,1); topvbox.Add(consolevbox); // topvbox.PackStart(mainhbox, true,true,4); // Now the 2nd 3rd. This contains 2 buttons. A start/stop, and a close. HBox buttonhbox = new HBox(true, 3); startstop = new Button("Stop"); startstop.SetSizeRequest(70, 30); startstop.Clicked += new EventHandler(startstopEvent); Button close = new Button("Close"); close.Clicked += new EventHandler(quitEvent); buttonhbox.Add(startstop); buttonhbox.Add(close); Alignment halign = new Alignment(1, 0, 0, 0); halign.Add(buttonhbox); topvbox.PackStart(halign, false, false, 3); // Now the bottom 3rd. A status bar statusbar = new Statusbar(); statusbar.Push(1,"Hey, it's a status"); topvbox.PackStart(statusbar,false,false,0); // Add our top level container to the window Add(topvbox); ShowAll(); }