web-dev-qa-db-fra.com

Quel composant est responsable du plateau et comment le manipuler en utilisant C ++?

Mon objectif est d'écrire une application graphique de bureau qui utilisera ces commandes trouvées dans https://askubuntu.com/a/14083/183

pacmd list-sinks to list name or index number of possible sinks

pacmd set-default-sink "SINKNAME" to set the default output sink

pacmd set-default-source "SOURCENAME" to set the default input

pacmd set-sink-volume index volume

pacmd set-source-volume index volume for volume control (0 = Mute, 65536 = 100%)

Ensuite, l'application aura une icône de plateau qui affiche une liste de périphériques audio qui seront cliquables pour basculer le périphérique audio sur celui-ci. Au fur et à mesure qu'ils sont cliqués, le volume sonore diminuera le volume de 0 au point du volume du système actuel (j'ai donc également besoin d'accéder au volume du système.)

Inconnus:

  • Comment ajouter par programme une icône de barre d'état dans C++
  • Comment faire un affichage déroulant lorsque vous cliquez sur cette icône de plateau et lui faire afficher des éléments qui sont également cliquables (un peu comme la façon dont l'icône de courrier affiche Thunderbird)
  • Comment lier les événements de clic à une fonction c ++ qui s'exécutera (afin de passer à ce périphérique audio, je disposerai d'une fonction c ++.)

J'ai juste besoin de quelques conseils pour identifier le composant de bureau que j'essaie de manipuler et où trouver la documentation de l'API pour celui-ci.

Remarques:

4
Logan

Découvrez libappindicator . Il est chargé de mettre l'icône dans le bac. Le menu déroulant affiché par l'indicateur est un GtkMenu . Le reste devrait être familier si vous avez travaillé avec GTK +. Voici un exemple minimal.

#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>

static void do_something(GtkWidget *widget, gpointer data) {
  //...
}

int main (int argc, char **argv) {
  gtk_init(&argc, &argv);
  GtkWidget *menu = gtk_menu_new();
  GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic("_This is a menu item");
  gtk_menu_Shell_append(GTK_MENU_Shell(menu), menuitem);
  g_signal_connect(menuitem, "activate", G_CALLBACK(do_something), NULL);

  /* the second parameter is the icon displayed */
  AppIndicator* ind = app_indicator_new("test", "indicator-messages-new", 
                     APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
  app_indicator_set_menu(ind, GTK_MENU(menu));
  gtk_main();
}

Vous le compilez avec ce qui suit. Tu auras besoin libgtk2.0-dev et libappindicator-dev paquets.

$ gcc test.c `pkg-config --cflags --libs gtk+-2.0 appindicator-0.1`

Vous comprendrez le reste. Le moyen le plus simple consiste à consulter d'autres applications d'indicateurs simples. Par exemple, voir l'indicateur de cette réponse .

1
mkayaalp