Gtkmm, widget/container wie der Dateiordner

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
GeoW
Beiträge: 49
Registriert: 23.03.2007 16:10:10

Gtkmm, widget/container wie der Dateiordner

Beitrag von GeoW » 16.07.2013 21:21:29

Hallo,
ich suche ein Widget/Container wo die eingefügten Widgets sich automatisch verteilen, wie die Icons der Ordner und Dateien im Dateiordner (z. B. Nautilus). Also ich meine, wenn ich das Fenster in der Breite ändere, dass die Widgets, die nicht mehr nebeneinander passen in die nächste Zeile rutschen bzw. umgekehrt. Ich hoffe ihr wisst was ich meine.
Ich habe zwar schon die Doku von gtkmm.org durchsucht, aber ich finde nichts oder sehe es einfach nicht.
Gibt es dafür ein Widget/Cntainer? Oder muss ich die Größenänderung überwachen und die eingefügten Widgets entsprechend neu anordnen?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von cosmac » 17.07.2013 19:58:07

hi,

hast du schon GtkIconView ausprobiert?
Beware of programmers who carry screwdrivers.

GeoW
Beiträge: 49
Registriert: 23.03.2007 16:10:10

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von GeoW » 18.07.2013 20:07:50

Erstmal danke für den Hinweis.
Nein, habe ich bisher noch nicht. Habe mir jetzt aber mal die Referenzen angesehen. Sehe ich das richtig, das ich dort die Anzahl der Icons, die nebeneinander (colums) sein soll vorgebe? Sprich, egal wie Breit das Fenster ist, die Anzahl der Icons in einer Zeile bleibt immer gleich. Und dann hat IconView einen weißen Hintergrund, der sollte eher Transparent sein.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von cosmac » 18.07.2013 20:27:23

gtk_icon_view_set_columns () hat geschrieben:Sets the ::columns property which determines in how many columns the icons are arranged. If columns is -1, the number of columns will be chosen automatically to fill the available area.
das würde ich so verstehen, dass du die nicht vorgeben musst.
Den Hintergrund müsstest du mit gtk_widget_override_background_color() beeinflussen können. Eine andere Farbe sollte auf jeden Fall möglich sein, aber du übergibst ja eine GdkRGBA-Farbe. Wenn du Glück hast, bedeutet das A "Transparenz".
Beware of programmers who carry screwdrivers.

GeoW
Beiträge: 49
Registriert: 23.03.2007 16:10:10

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von GeoW » 18.07.2013 21:49:09

Doch wieder an den falschen stellen geschaut.
Ok, ich werde es am Wochenende mal ausprobieren.

GeoW
Beiträge: 49
Registriert: 23.03.2007 16:10:10

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von GeoW » 19.07.2013 23:43:12

So, habe schon mal ein wenig probiert. Das mit dem Hintergrund funktioniert schon mal. Das set_columns(-1) scheint nur beim Programmstart Einfluss zu haben. Sprich, wenn das Fenster geöffnet wird, werden die Icons automatisch entsprechend der Fensterbreite angeordnet. Wenn ich die Fensterbreite ändere bleibt die Anzahl pro Zeile aber leider konstant.

brummer
Beiträge: 181
Registriert: 19.02.2007 19:21:23

Re: Gtkmm, widget/container wie der Dateiordner

Beitrag von brummer » 20.07.2013 10:49:35

Meine Lösung für ein "Ähnliches" Problem war, das ich das signal_expose_event() des widgets abfange und dort dann die Anweisungen für den Container Aufbau platziert habe. Bei mir ging es darum widgets im Container an Ort und stelle zu halten, egal wie groß der Container ist.
sieht bei mir so aus:

Code: Alles auswählen

Widget::Widget()
{
[. . . ]
set_app_paintable(true);
m_paintbox.signal_expose_event().connect(
    sigc::mem_fun(this, &Widget::_expose_event), true);
[. . . ]
}


// set borderwith for paintbox when widget resize
// to hold controllers in place
bool Widget::_expose_event(GdkEventExpose *event)
{
  int x, y, width, height, depth;
  m_paintbox.get_window()->get_geometry(x, y, width, height, depth);
  m_paintbox.set_border_width(height/20);
  return false;
}

Antworten