void Create() { Gtk.Paned old = Control; switch (orientation) { default: case SplitterOrientation.Horizontal: Control = new Gtk.HPaned(); break; case SplitterOrientation.Vertical: Control = new Gtk.VPaned(); break; } if (container.Child != null) { container.Remove(container.Child); } container.Child = Control; if (old != null) { var child1 = old.Child1; var child2 = old.Child2; old.Remove(child2); old.Remove(child1); Control.Pack1(child1 ?? EmptyContainer(), fixedPanel != SplitterFixedPanel.Panel1, true); Control.Pack2(child2 ?? EmptyContainer(), fixedPanel != SplitterFixedPanel.Panel2, true); old.Destroy(); } else { Control.Pack1(EmptyContainer(), fixedPanel != SplitterFixedPanel.Panel1, true); Control.Pack2(EmptyContainer(), fixedPanel != SplitterFixedPanel.Panel2, true); } }
static void Main(string[] args) { OurParserTask r = new OurParserTask(Console.In); r.run(); Gtk.Application.Init(); Gtk.Window window = new Gtk.Window("Repodoc - Gtk# frontend"); Gtk.ScrolledWindow sw = new Gtk.ScrolledWindow(); Gtk.TextView tv = new Gtk.TextView(); tv.Editable = false; tv.CursorVisible = false; Pango.FontDescription fontdesc = Pango.FontDescription.FromString("Monospace"); tv.ModifyFont(fontdesc); DocsTreeView t = new DocsTreeView(tv, r); sw.Add(t); Gtk.VPaned vp = new Gtk.VPaned(); vp.BorderWidth = 6; vp.Pack1(sw, true, true); window.Add(vp); Gtk.ScrolledWindow sw2 = new Gtk.ScrolledWindow(); sw2.Add(tv); vp.Pack2(sw2, true, true); window.SetDefaultSize(500, 400); window.DeleteEvent += delete_event; window.ShowAll(); Gtk.Application.Run(); }
public MainWindow() : base("Smuxi") { // restore window size / position int width, heigth; if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/Width"] != null) { width = (int) Frontend.FrontendConfig[Frontend.UIName + "/Interface/Width"]; } else { width = 800; } if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/Heigth"] != null) { heigth = (int) Frontend.FrontendConfig[Frontend.UIName + "/Interface/Heigth"]; } else { heigth = 600; } if (width < -1 || heigth < -1) { width = -1; heigth = -1; } if (width == -1 && heigth == -1) { SetDefaultSize(800, 600); Maximize(); } else if (width == 0 && heigth == 0) { // HACK: map 0/0 to default size as it crashes on Windows :/ SetDefaultSize(800, 600); } else { SetDefaultSize(width, heigth); } int x, y; if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/XPosition"] != null) { x = (int) Frontend.FrontendConfig[Frontend.UIName + "/Interface/XPosition"]; } else { x = 0; } if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/YPosition"] != null) { y = (int) Frontend.FrontendConfig[Frontend.UIName + "/Interface/YPosition"]; } else { y = 0; } if (x < 0 || y < 0) { x = 0; y = 0; } if (x == 0 && y == 0) { SetPosition(Gtk.WindowPosition.Center); } else { Move(x, y); } DeleteEvent += OnDeleteEvent; FocusInEvent += OnFocusInEvent; FocusOutEvent += OnFocusOutEvent; WindowStateEvent += OnWindowStateEvent; ChatTreeView = new ChatTreeView(); Notebook = new Notebook(); Notebook.SwitchPage += OnNotebookSwitchPage; Notebook.FocusInEvent += OnNotebookFocusInEvent; ChatViewManager = new ChatViewManager(Notebook, ChatTreeView); Assembly asm = Assembly.GetExecutingAssembly(); ChatViewManager.Load(asm); ChatViewManager.LoadAll(System.IO.Path.GetDirectoryName(asm.Location), "smuxi-frontend-gnome-*.dll"); ChatViewManager.ChatAdded += OnChatViewManagerChatAdded; ChatViewManager.ChatSynced += OnChatViewManagerChatSynced; ChatViewManager.ChatRemoved += OnChatViewManagerChatRemoved; #if GTK_SHARP_2_10 StatusIconManager = new StatusIconManager(this, ChatViewManager); #endif #if INDICATE_SHARP || MESSAGING_MENU_SHARP IndicateManager = new IndicateManager(this, ChatViewManager); #endif #if NOTIFY_SHARP NotifyManager = new NotifyManager(this, ChatViewManager); #endif #if IPC_DBUS NetworkManager = new NetworkManager(ChatViewManager); #endif UI = new GnomeUI(ChatViewManager); // HACK: Frontend.FrontendConfig out of scope EngineManager = new EngineManager(Frontend.FrontendConfig, UI); Entry = new Entry(ChatViewManager); var entryScrolledWindow = new Gtk.ScrolledWindow(); entryScrolledWindow.ShadowType = Gtk.ShadowType.EtchedIn; entryScrolledWindow.HscrollbarPolicy = Gtk.PolicyType.Never; entryScrolledWindow.SizeRequested += delegate(object o, Gtk.SizeRequestedArgs args) { // predict and set useful heigth int lineWidth, lineHeigth; using (var layout = Entry.CreatePangoLayout("Qp")) { layout.GetPixelSize(out lineHeigth, out lineHeigth); } var it = Entry.Buffer.StartIter; int newLines = 1; // move to end of next visual line while (Entry.ForwardDisplayLineEnd(ref it)) { newLines++; // calling ForwardDisplayLineEnd repeatedly stays on the same position // therefor we move one cursor position further it.ForwardCursorPosition(); } newLines = Math.Min(newLines, 3); // use text heigth + a bit extra var bestSize = new Gtk.Requisition() { Height = (lineHeigth * newLines) + 5 }; args.Requisition = bestSize; }; entryScrolledWindow.Add(Entry); ProgressBar = new Gtk.ProgressBar(); StatusHBox = new Gtk.HBox(); MenuWidget = new MenuWidget(this, ChatViewManager); var treeviewScrolledWindow = new Gtk.ScrolledWindow() { ShadowType = Gtk.ShadowType.EtchedIn, HscrollbarPolicy = Gtk.PolicyType.Never, VscrollbarPolicy = Gtk.PolicyType.Automatic }; treeviewScrolledWindow.Add(ChatTreeView); ChatViewManager.ChatAdded += (sender, e) => { treeviewScrolledWindow.CheckResize(); }; var notebookPaned = new Gtk.VPaned(); notebookPaned.Pack1(Notebook, true, false); notebookPaned.Pack2(entryScrolledWindow, false, false); var treeviewPaned = new Gtk.HPaned(); treeviewPaned.Pack1(treeviewScrolledWindow, false, false); treeviewPaned.Pack2(notebookPaned, true, false); TreeViewHPaned = treeviewPaned; var entryPaned = new Gtk.VPaned(); entryPaned.ButtonPressEvent += (sender, e) => { // reset entry size on double click if (e.Event.Type == Gdk.EventType.TwoButtonPress && e.Event.Button == 1) { GLib.Timeout.Add(100, delegate { entryPaned.Position = -1; return false; }); } }; entryPaned.Pack1(treeviewPaned, true, false); Gtk.VBox vbox = new Gtk.VBox(); vbox.PackStart(MenuWidget, false, false, 0); vbox.PackStart(entryPaned, true, true, 0); NetworkStatusbar = new Gtk.Statusbar(); NetworkStatusbar.WidthRequest = 300; NetworkStatusbar.HasResizeGrip = false; Statusbar = new Gtk.Statusbar(); Statusbar.HasResizeGrip = false; Gtk.HBox status_bar_hbox = new Gtk.HBox(); status_bar_hbox.Homogeneous = true; status_bar_hbox.PackStart(NetworkStatusbar, false, true, 0); status_bar_hbox.PackStart(Statusbar, true, true, 0); StatusHBox.PackStart(status_bar_hbox); StatusHBox.PackStart(ProgressBar, false, false, 0); StatusHBox.ShowAll(); StatusHBox.NoShowAll = true; StatusHBox.Visible = (bool) Frontend.FrontendConfig["ShowStatusBar"]; vbox.PackStart(StatusHBox, false, false, 0); Add(vbox); }
public MainWindow() : base("Smuxi") { // restore window size / position int width, heigth; if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/Width"] != null) { width = (int)Frontend.FrontendConfig[Frontend.UIName + "/Interface/Width"]; } else { width = 800; } if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/Heigth"] != null) { heigth = (int)Frontend.FrontendConfig[Frontend.UIName + "/Interface/Heigth"]; } else { heigth = 600; } if (width < -1 || heigth < -1) { width = -1; heigth = -1; } if (width == -1 && heigth == -1) { SetDefaultSize(800, 600); Maximize(); } else if (width == 0 && heigth == 0) { // HACK: map 0/0 to default size as it crashes on Windows :/ SetDefaultSize(800, 600); } else { SetDefaultSize(width, heigth); } int x, y; if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/XPosition"] != null) { x = (int)Frontend.FrontendConfig[Frontend.UIName + "/Interface/XPosition"]; } else { x = 0; } if (Frontend.FrontendConfig[Frontend.UIName + "/Interface/YPosition"] != null) { y = (int)Frontend.FrontendConfig[Frontend.UIName + "/Interface/YPosition"]; } else { y = 0; } if (x < 0 || y < 0) { x = 0; y = 0; } if (x == 0 && y == 0) { SetPosition(Gtk.WindowPosition.Center); } else { Move(x, y); } DeleteEvent += OnDeleteEvent; FocusInEvent += OnFocusInEvent; FocusOutEvent += OnFocusOutEvent; WindowStateEvent += OnWindowStateEvent; ChatTreeView = new ChatTreeView(); Notebook = new Notebook(); Notebook.SwitchPage += OnNotebookSwitchPage; Notebook.FocusInEvent += OnNotebookFocusInEvent; ChatViewManager = new ChatViewManager(Notebook, ChatTreeView); Assembly asm = Assembly.GetExecutingAssembly(); ChatViewManager.Load(asm); ChatViewManager.LoadAll(System.IO.Path.GetDirectoryName(asm.Location), "smuxi-frontend-gnome-*.dll"); ChatViewManager.ChatAdded += OnChatViewManagerChatAdded; ChatViewManager.ChatSynced += OnChatViewManagerChatSynced; ChatViewManager.ChatRemoved += OnChatViewManagerChatRemoved; #if GTK_SHARP_2_10 StatusIconManager = new StatusIconManager(this, ChatViewManager); #endif #if INDICATE_SHARP || MESSAGING_MENU_SHARP IndicateManager = new IndicateManager(this, ChatViewManager); #endif #if NOTIFY_SHARP NotifyManager = new NotifyManager(this, ChatViewManager); #endif #if IPC_DBUS NetworkManager = new NetworkManager(ChatViewManager); #endif UI = new GnomeUI(ChatViewManager); // HACK: Frontend.FrontendConfig out of scope EngineManager = new EngineManager(Frontend.FrontendConfig, UI); Entry = new Entry(ChatViewManager); var entryScrolledWindow = new Gtk.ScrolledWindow(); entryScrolledWindow.ShadowType = Gtk.ShadowType.EtchedIn; entryScrolledWindow.HscrollbarPolicy = Gtk.PolicyType.Never; entryScrolledWindow.SizeRequested += delegate(object o, Gtk.SizeRequestedArgs args) { // predict and set useful height int lineWidth, lineHeight; using (var layout = Entry.CreatePangoLayout("Qp")) { layout.GetPixelSize(out lineWidth, out lineHeight); } var it = Entry.Buffer.StartIter; int newLines = 1; // move to end of next visual line while (Entry.ForwardDisplayLineEnd(ref it)) { newLines++; // calling ForwardDisplayLineEnd repeatedly stays on the same position // therefor we move one cursor position further it.ForwardCursorPosition(); } newLines = Math.Min(newLines, 3); // use text heigth + a bit extra var bestSize = new Gtk.Requisition() { Height = (lineHeight * newLines) + 5 }; args.Requisition = bestSize; }; entryScrolledWindow.Add(Entry); ProgressBar = new Gtk.ProgressBar(); StatusHBox = new Gtk.HBox(); MenuWidget = new MenuWidget(this, ChatViewManager); var treeviewScrolledWindow = new Gtk.ScrolledWindow() { ShadowType = Gtk.ShadowType.EtchedIn, HscrollbarPolicy = Gtk.PolicyType.Never, VscrollbarPolicy = Gtk.PolicyType.Automatic }; treeviewScrolledWindow.Add(ChatTreeView); ChatViewManager.ChatAdded += (sender, e) => { treeviewScrolledWindow.CheckResize(); }; var notebookPaned = new Gtk.VPaned(); notebookPaned.Pack1(Notebook, true, false); notebookPaned.Pack2(entryScrolledWindow, false, false); var treeviewPaned = new Gtk.HPaned(); treeviewPaned.Pack1(treeviewScrolledWindow, false, false); treeviewPaned.Pack2(notebookPaned, true, false); TreeViewHPaned = treeviewPaned; var entryPaned = new Gtk.VPaned(); entryPaned.ButtonPressEvent += (sender, e) => { // reset entry size on double click if (e.Event.Type == Gdk.EventType.TwoButtonPress && e.Event.Button == 1) { GLib.Timeout.Add(100, delegate { entryPaned.Position = -1; return(false); }); } }; entryPaned.Pack1(treeviewPaned, true, false); Gtk.VBox vbox = new Gtk.VBox(); vbox.PackStart(MenuWidget, false, false, 0); vbox.PackStart(entryPaned, true, true, 0); NetworkStatusbar = new Gtk.Statusbar(); NetworkStatusbar.WidthRequest = 300; NetworkStatusbar.HasResizeGrip = false; Statusbar = new Gtk.Statusbar(); Statusbar.HasResizeGrip = false; Gtk.HBox status_bar_hbox = new Gtk.HBox(); status_bar_hbox.Homogeneous = true; status_bar_hbox.PackStart(NetworkStatusbar, false, true, 0); status_bar_hbox.PackStart(Statusbar, true, true, 0); StatusHBox.PackStart(status_bar_hbox); StatusHBox.PackStart(ProgressBar, false, false, 0); StatusHBox.ShowAll(); StatusHBox.NoShowAll = true; StatusHBox.Visible = (bool)Frontend.FrontendConfig["ShowStatusBar"]; vbox.PackStart(StatusHBox, false, false, 0); Add(vbox); }