# [GTK] Toolbar (Datei, Bearbeiten Ansicht usw.)



## MC Breit (13. Juni 2004)

Hi!
Ich mach gerade ein wenig mit GTK herum, jetzt will ich eine Toolbar in mein Programm einbauen, hab mir geadcht, die passende klasse dafür ist warscheinlich GtkToolbar, also, Toolbar erstellen, und reinpacken, jetzt das problem, der platz der fuer die Toolbar vorgesehen ist wird zwar eingenommen, jedoch wird sie nicht oder nicht richtig angezeigt. Wenn ich es mit glade mache, dann klappt es, ich will es aber so lernen.
Folglich -> Ich habe die Funktion von GtkToolbar nicht verstanden.
Ich hab mir auch schon mehrere Ander projekte angeschaut, die sind aber entweder total schlecht kommentiert, oder benutzen glade :-/
Wenn jemand mir erklähren könnte, wie ich die Items in deser Toolbar hinzufüge, würde ich das sehr gut finden.
Oder wenn mir jemand ein deutsches Tutorial dazu geben kann. Wobei english natürlich notfalls auch ok ist. Wichtig ist, dass es sich um GTK 1 und nicht 2 handelt!

Hier mal mein versuch:

```
/* Ich denke das dashier php ist macht keinen großen unterscheid,
ihr könnte es mir auch gerne andhand von C/Cpp oder Perl erklähren,
die funktionalitäten sind ja weitgehend gleich. */
//So der call 
  $HeaderToolbar = HeaderToolbar(); 
  $BoxTopBottomSplit->attach($HeaderToolbar, 0, 1, 0, 1); 
  //Hier wird das ganze dann ins Widget und Window gepackt, hab cih weggelassen 

//hier die Funktionen fuer die Toolbar 
function HeaderToolbar() 
{ 
  $HeaderToolbar = &new GtkToolbar(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT); 
  $HeaderToolbar->insert_widget(ToolbarMenueFile(), 'Datei', 'Wozu der String da ist: kA', 1); 
  $HeaderToolbar->set_usize(735, 20); 
  return $HeaderToolbar; 
} 

function ToolbarMenueFile() 
{ 
  static $ToolbarMenueFile; 
  if( !is_object($ToolbarMenueFile) ) 
  { 
    $ToolbarMenueFile = &new GtkToolbar(GTK_ORIENTATION_VERTICAL, GTK_TOOLBAR_TEXT); 
    $ToolbarMenueFile->set_usize(200, 200); 
  } 
  return $ToolbarMenueFile; 
}
```

Vielen dank im Vorraus..


----------



## Dario Linsky (13. Juni 2004)

Es wäre noch gut zu wissen, welches Sprach-Binding der GTK-Klassen du benutzt.


----------



## MC Breit (14. Juni 2004)

Hi!
Ich benutze GTK1.2 mit erweiterung für php 4.0.3 Interpreter phpGTK ( http://gtk.php.net ) falls du das meinst, sorry, wenn du was anderes meintest, sag es bitte, wie gesagt, ich bin GTK einsteiger 

Ich habe in einem gtk tutorial mal irgendwas von gtk_toolbar_add_item gelesen, die funktion scheint es aber nur in GTK 2 zu geben, da sie weder in der referenz steht, noch erkannt wird.. :-(

Eidt: So, ich habs!
Ich war in der völlig falschen klasse *uhhps*..
Wen es interessiert, mein File Menue habe ich jetzt so erstellt:

```
//Menue ins Window einfuegen:
  $HeaderMenue = HeaderMenue();
  $BoxTopBottomSplit->attach($HeaderMenue, 0, 1, 0, 1);

//Die funktionen
function HeaderMenue()
{
  $HeaderMenue = &new GtkMenuBar();
  $HeaderMenue->append(HeaderMenueFile());
  return $HeaderMenue;
}

function HeaderMenueFile()
{
  static $HeaderMenueFile;
  if( !is_object($ToolbarMenueFile) )
  {
    $HeaderMenueFile = &new GtkMenuItem('File');
    $HeaderMenueFileSave = &new GtkMenuItem('Save');
    $HeaderMenueFileSaveUnder = &new GtkMenuItem('Save under..');
    
    $HeaderMenueFileBox = &new GtkMenu();
    
    $HeaderMenueFileBox->append($HeaderMenueFileSave);
    $HeaderMenueFileBox->append($HeaderMenueFileSaveUnder);
    
    $HeaderMenueFile->set_submenu($HeaderMenueFileBox);
  }
  return $HeaderMenueFile;
}
```


----------



## Dario Linsky (14. Juni 2004)

gtk_toolbar_append_item gibt's anscheinend auch für Gtk+ 1.2. Wahrscheinlich meintest du die Funktion, oder?


----------



## MC Breit (14. Juni 2004)

Hmm.. Ja, genau die hab ich gemeint 
Naja, jetzt hab ich es mit GtkMenue gemacht..
Aber jetzt habe ich ein Problem, wie fügt man einen Seperator hinzu?
append_seperator, prepend_seperator und add_seperator gibt es alle samt nich :-/
In glade gibt es diese anscheined jedoch schon.
Ich hab jetzt auch die GtkMenueShell Memberklassen durchforstet, konnte aber nichts in der art finden..
Und GtkSeperators darf man nicht in Menue Widgets einbauen, habs auch prbiert, werden ignoriert..
Da noch ne idee?


----------



## Dario Linsky (14. Juni 2004)

gtk_toolbar_append_space

Auf gtk.org gibt's übrigens auch eine ziemlich ausführliche Dokumentation zu Gtk+ 1.2.


----------



## MC Breit (15. Juni 2004)

Hi!
Jetzt bin ich ja aber von Toolbar auf Menue umgestiegen, da gibts die Funktion nicht, und die Toolbar Space kann ich da auch nich einfügen..
Gibts da denn keine Möglichkeit für ein space in gtk_menu_bar?
Was ich bei Menu im Tutorial gefunden habe, ist mit einem Item, also, dashier:

```
static GtkItemFactoryEntry menu_items[] = {
  { "/_File",         NULL,         NULL, 0, "<Branch>" },
  { "/File/_New",     "<control>N", print_hello, 0, NULL },
  { "/File/_Open",    "<control>O", print_hello, 0, NULL },
  { "/File/_Save",    "<control>S", print_hello, 0, NULL },
  { "/File/Save _As", NULL,         NULL, 0, NULL },
  { "/File/sep1",     NULL,         NULL, 0, "<Separator>" },
  { "/File/Quit",     "<control>Q", gtk_main_quit, 0, NULL },
  { "/_Options",      NULL,         NULL, 0, "<Branch>" },
  { "/Options/Test",  NULL,         NULL, 0, NULL },
  { "/_Help",         NULL,         NULL, 0, "<LastBranch>" },
  { "/_Help/About",   NULL,         NULL, 0, NULL },
};
```
Hier gibt es anscheinend eine Seperator, jedoch verstehe ich nicht ganz, wie diese items aufgebaut sind.
Ich gehe mal davon aus, das das erste angibt, wo im neue sich der teil befindet.
Der 2te ist der control^^ und der 3te der handler, und der 4te der Inhaltstyp.
Könnte ich also einen seperator in der art:
$HeaderMenueFileBox->add('"/File/sep1",NULL,NULL,0,"<Separator>"'); hinzufügen!?
In dem fall erhalte ich dann die fehlermeldung:
Warning: add() expects argument 1 to be GtkWidget, string given in D:\Programmin
g\TeamOrga\TeamOrga.phpap on line 92
Ich verstehe das (noch) nicht ganz :-(


----------

