LINUX.ORG.RU

Gtk#


0

0

Когда описываешь класс окна, использующего glade, то приходится пользоваться такой конструкцией:

public class FirstWindow
{
public FirstWindow()
{
Glade.XML gxml = new Glade.XML(null, \"MainWindow.glade\", \"MainWindow\", null);
gxml.Autoconnect(this);
}
}

В итоге класс окна по сути обычный класс, не наследуемый никаких иных классов. При добавлении из методов класса новых виджетов или создании других диалогов можно (а иногда просто необходимо) указывать родителя в конструкторе. Из-за того что класс не наследует ни Gtk.Window ни чего-либо еще, это невозможно.

Других примеров использования Glade в сети не найти. Подскажите как можно сделать класс окна производным от класса созданного glade, как в Qt?

Что-то вроде:

public class FirstWindow: Glade.GeneratedWindow
{
public FirstWindow()
{
Glade.XML gxml = new Glade.XML(null, \"MainWindow.glade\", \"MainWindow\", null);
gxml.Autoconnect(this);
}
}

Как иначе выходят из положения?

И еще один вопрос.
Когда я создаю диалог открытия файла, он не реагирует на нажатия на кнопки OK/Cansel.

FileChooserDialog openDialog = new FileChooserDialog(\"Open File\", null, FileChooserAction.Open, Stock.Cancel, ResponseType.Cancel, Stock.Open, ResponseType.Accept);

if ( (ResponseType) openDialog.Run() != ResponseType.Accept)
return;

Из-за чего это может быть?


1. Надуманная проблема. Пронаследуй свой FirstWindow из диалога, а в Glade создавай не сам диалог, а только его содержимое. Соответственно в конструкторе это содержимое упаковывай в диалог.

2. Должно работать. 

using System;
using Gtk;
using GtkSharp;

public class App {

    public static void Main(string[] args) {
	
	Application.Init();
	FileChooserDialog openDialog = 
		new FileChooserDialog("Open File", 
				      null, FileChooserAction.Open, 
	    	    		      Stock.Cancel, ResponseType.Cancel, 
		    		      Stock.Open, ResponseType.Accept);
	
	if ((ResponseType) openDialog.Run() != ResponseType.Accept) {
		Console.WriteLine ("Hello");
	} else {
		Console.WriteLine ("World");
	}
        return;
    }
}

welkam ★★
()

Насколько я знаю из обычного gtk+glade обычно требуется указать родителя не в смысле наследования, а в смысле агрегации виджетов.

Виджеты из glade можно получать по именам.

YesSSS ★★★
()
Ответ на: комментарий от welkam

> 1. Надуманная проблема. Пронаследуй свой FirstWindow из диалога, а в Glade создавай не сам диалог, а только его содержимое. Соответственно в конструкторе это содержимое упаковывай в диалог.

Вы не могли бы показать пример, я не совсем понял.

mumu
() автор топика
Ответ на: комментарий от mumu

Что-то в таком духе:

using System;
using Gtk;

class MyBasicDialog : GtkDialog {
	MyBasicDialog () {
		Glade.XML gxml = new Glade.XML(null, 
			"basedialog.glade", "dialog_contents", null);
		gxml.Autoconnect(this);
		this.Vbox.PackStart (gxml.GetWidget("dialog_contents"), true, true, 0);
	}
}

class MyAdvancedDialog : MyBasicDialog {
	MyAdvancedDialog () {
	}
}

Реальный код:

http://www.google.com/codesearch?hl=ru&q=+Glade.XML+Dialog+vbox+show:eAfr_3L
GfwA:Ck1KbB6qMWA:wyiC3t3Y-CQ&sa=N&cd=2&ct=rc&cs_p=http://gentoo.
osuosl.org/distfiles/tapiocaui-0.3.9.tar.gz&cs_f=tapiocaui-0.3.9/src/tapioca
ui_new_account_dialog.c#a0


welkam ★★
()
Ответ на: комментарий от welkam

Чудеса какие-то. Компилирую этот код - работает нормально.
Точно такой же запускаю в своем проекте - кнопки не отвечают, хотя никаких флагов окна не устанавливаю.

mumu
() автор топика
Ответ на: комментарий от mumu

Ищи ошибку. Может быть обработчик перехватывается из того же glade или опечатка какая. Может цикл событий блокируется.

welkam ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.