Como hacer que las categorías de Whisker Menu aparezcan a la Izquierda

Ayer publiqué un post en donde les compartí un Wisker Menu modificado por mi, en el cual las categorías se muestran a la izquierda y las aplicaciones a la derecha (como en cualquier menú  tradicional), el caso es que a petición de Eduardo, hoy les mostraré como pueden realizar este cambio ustedes mismos.

Para empezar debo aclarar que no es nada del otro mundo (de hecho carece de ciencia), por lo tanto inclusive aquellos sin conocimientos en programación pueden hacerlo, eso sí, acatando mis instrucciones al pie de la letra.

Paso 1

Descargar e instalar las herramientas indispensables para compilar:


aptitude install build-essential checkinstall cmake libexo-1-dev libgarcon-1-0-dev libxfce4ui-1-dev libxfce4util-dev xfce4-panel-dev make git

Paso 2

Clonamos el repositorio de WiskerMenu desde la terminal con el siguiente comando.

git clone https://github.com/gottcode/xfce4-whiskermenu-plugin

Paso 3

 

Abrimos nuestro explorador de archivos (Thunar) y nos ubicamos en el directorio WiskerMenu dentro de nuestra carpeta /home, posteriormente ingresamos al subdirectorio /panel-plugin, una vez allí, abrimos el archivo window.cpp con nuestro editor favorito (gedit, leafpad, mousepad, geany) y en él identificamos las siguientes lineas.

Nota: Perdonen si la indentación en el blog no se muestra.

 

	// Create box for packing launcher pages
	m_panels_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_panels_box), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_favorites->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_recent->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_applications->get_widget(), true, true, 0);

	// Create box for packing sidebar
	m_sidebar_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_favorites_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_recent_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, gtk_hseparator_new(), false, true, 0);

	m_sidebar = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_sidebar), false, false, 0);
	gtk_scrolled_window_set_shadow_type(m_sidebar, GTK_SHADOW_NONE);
	gtk_scrolled_window_set_policy(m_sidebar, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);

	GtkWidget* viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(m_sidebar),
		gtk_scrolled_window_get_vadjustment(m_sidebar));
	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
	gtk_container_add(GTK_CONTAINER(m_sidebar), viewport);
	gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(m_sidebar_box));

	GtkSizeGroup* sidebar_size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_sidebar));
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_commands_align));

Lo anterior significa en palabras cristianas que, el primer elemento agregado al contenedor (digamos la ventana del menú) de izquierda a derecha,
sera el “panel_box” es decir, el área de aplicaciones, seguido del “sidebar” área de categorías, por lo tanto respetando el orden respectivo, la ventana mostrará primero las aplicaciones a la izquierda y luego las categorías a la derecha.

Por lo tanto lo único que debemos hacer para cambiar esto, es invertir el orden en el que son agregados los componentes, lo que naturalmente se logra cambiando de lugar el componente que se agregará de primero; de manera práctica, cortamos la parte que dice  // Create box for packing launcher pages  hasta antes de // Create box for packing sidebar y la pegamos debajo de esta. Nos quedará de la siguiente forma.

 

 

// Create box for packing sidebar
	m_sidebar_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_favorites_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_recent_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, gtk_hseparator_new(), false, true, 0);

	m_sidebar = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_sidebar), false, false, 0);
	gtk_scrolled_window_set_shadow_type(m_sidebar, GTK_SHADOW_NONE);
	gtk_scrolled_window_set_policy(m_sidebar, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);

	GtkWidget* viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(m_sidebar),
		gtk_scrolled_window_get_vadjustment(m_sidebar));
	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
	gtk_container_add(GTK_CONTAINER(m_sidebar), viewport);
	gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(m_sidebar_box));

	GtkSizeGroup* sidebar_size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_sidebar));
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_commands_align));

	// Create box for packing launcher pages
	m_panels_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_panels_box), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_favorites->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_recent->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_applications->get_widget(), true, true, 0);

Bien con esto ya hemos cambiado las categorías a la izquierda y las aplicaciones a la derecha, sin embargo, si cambiamos el menú de posición a una que no sea tradicional, es decir en el borde derecho de la pantalla tendremos problemas con el re posicionamiento de los elementos del menú, les ilustro.

Por defecto WiskerMenu  ubica las aplicaciones a la izquierda y las categorías a la derecha (ya aburro con esa hablada jeje) pero esto sólo es así, cuando el menú se encuentra en las esquinas superior e inferior izquierda de la pantalla. Si por el contrario se encuentra en las esquinas derechas, el menú cambia a nuestra posición deseada (categorías izquierda; aplicaciones derecha) es ilógico lo sé, pero así lo pensaron los desarrolladores, entonces con nuestra siguiente modificación, vamos a alterar dicho reordenamiento para que sea inverso y lógico.

Paso 4

Ubicamos está linea  y en la sección else,  cambiamos m_panels_box, 2 por un 1 y m_sidebar, 1 por un 2.

if ((layout_left && !wm_settings->position_categories_alternate)
            || (!layout_left && wm_settings->position_categories_alternate))
    {
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_panels_box), 1);
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_sidebar), 2);
    }
    else
    {
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_panels_box), 2);
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_sidebar), 1);
    }

Paso 5

 

Ahora sí, guardamos nuestros cambios y procedemos a compilar, para ello abrimos una terminal en el directorio
~/xfce4-whiskermenu-plugin/panel-plugin/ y ejecutamos lo siguiente:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
make

y como súper usuario

checkinstall

Paso 6

Por último, reiniciamos panel.

xfce4-panel --restart

Paso 7

Disfruten!!!
Cualquier duda o crítica pueden dejar un comentario, saludos.

Anuncios

Empezar a programar con C++ en linux (Arreglos)

Los vectores o arreglos son  dicho de manera vulgar, secciones o bloques apilados de manera consecutiva en las que se nos permite guardar un tipo determinado de información, visto de manera gráfica sería algo como esto:

En la imagen anterior vemos que los valores en los bloques son números enteros esto lo podríamos declarar en C++, como un vector de tipo int que es el tipo de variable que hemos visto hasta el momento.

veamos entonces la declaración de un arreglo dentro de la función main

int vector[10];

Esto crea un arreglo de tipo entero, es decir solo podremos almacenar números positivos y negativos, así como también guarda espacio para diez elementos en memoria.

Del mismo modo podemos declarar un arreglo con información ya contenida en su interior

int vector[]={0,1,2,3,4};

De modo que el tamaño del arreglo quedará sujeto al numero de elementos que le asignemos previamente, a esto se le llama inicializar un vector.
Bueno el siguiente programa que les mostraré es para insertar cinco elementos de tipo entero a un arreglo para posteriormente ser visualizado en pantalla.

#include <iostream>

using namespace std;

int main ()

{
int i, vector[5], j, interca;

cout<<" escribe 5 numeros al azar "<<endl;  /* el letrero se escribe antes para que se muestre una sola vez*/

for (i=0; i<5; i++)
/*el for es una estructura de control que permite repetir cinco veces  lo que esta entre llaves*/
cin>>vector[i];    /*lleno el vector*/

cout<<"Este es el arreglo que ingreso  ";
for (i=0; i<5; i++)
cout<<vector[i]; /*Muestra los elementos que le ingresamos al arreglo*/
cin.get();cin.get();
}

Bueno ahora a explicar un poco mejor como trabaja un for y porque es necesario su empleo en este fuente.
un for nos permite ejecutar una cantidad X de instrucciones según sean nuestras necesidades, asi por ejemplo:

for (i=0;1<3;i++)
cout<<"hola"<<endl;

El i es un subíndice, el primero nos dice donde empieza el conteo, el segundo es la condición de cuantas veces se ejecutará la instrucción esto pasará mientras el subíndice sea menor que 3 en nuestro caso particular, el tercer i nos dice en cuanto debemos aumentar la cifra del primer i para el segundo conteo, en otras palabras la segunda vez que el for se ejecuté el conteo inicial empezara en uno, puesto que el ++ significa que aumentamos una unidad.

Bueno ahora solo queda que ustedes lo compilen y modifiquen si gustan.
Comenten si lo desean…

Empezar a programar con C++ en linux

No pretendo hacer un extenso tutorial, ya que mis conocimientos en c++ no pasan de principiante-intermedio, pero la idea es hacer algo que les pueda servir de ayuda, al menos para los que comienzan a programar en C++. ¿Qué herramientas necesitamos ? Bueno para empezar instalaremos los paquetes:

1. codeblocks. (aptitude install codeblocks)

2. g++. (aptitude install g++)

Una vez hecho esto, tendremos nuestro IDE codeblocks con el que podemos trabajar cómodamente escribiendo las instrucciones de nuestro programa.

Empecemos entonces:

Vamos a escribir una aplicación que nos permita calcular las tablas de multiplicar del 1 al 100.

Para facilitar de una mejora manera la lectura del programa, puedes ver el código fuente haciendo clic en el siguiente enlace.
 tablas de multiplicar

El código viene con comentarios pero si algo no les queda claro pueden escribirme, espero les sea útil para aprender.