From 6a06e5877875d05dcc6ece1a33cf1f7d7762f197 Mon Sep 17 00:00:00 2001
From: Orcan Ogetbil <oget.fedora@gmail.com>
Date: Sat, 27 Nov 2010 22:16:34 +0000
Subject: ported popu menus of the canvas

---
 muse2/ChangeLog                 |   1 +
 muse2/muse/arranger/pcanvas.cpp | 101 ++++++++++++++++++++++++++++------------
 muse2/muse/arranger/pcanvas.h   |   5 +-
 muse2/muse/widgets/canvas.cpp   |  19 ++++----
 muse2/muse/widgets/canvas.h     |  11 ++---
 5 files changed, 89 insertions(+), 48 deletions(-)

diff --git a/muse2/ChangeLog b/muse2/ChangeLog
index 5b8e0a9b..46688805 100644
--- a/muse2/ChangeLog
+++ b/muse2/ChangeLog
@@ -4,6 +4,7 @@
           routedialogbase. (Orcan)
         - Fixed the whatsthis and tooltip bits of tho Midi Ports dialog. (Orcan)
         - Ported Quant Config dialog. (Orcan)
+        - Ported the popup menus in the canvas. This should restore the color selection of tracks. (Orcan)
 26.11.2010
         - Fixed midi trackinfo growing size - set output device list box and instrument button 
            h-size policy to 'Ignore'. (Tim)
diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp
index 0569f03d..6fbc32af 100644
--- a/muse2/muse/arranger/pcanvas.cpp
+++ b/muse2/muse/arranger/pcanvas.cpp
@@ -67,7 +67,7 @@ const char* partColorNames[] = {
       "Piano",
       "Saxophon",
       };
-
+/*
 //---------------------------------------------------------
 //   ColorListItem
 //---------------------------------------------------------
@@ -78,7 +78,7 @@ class ColorListItem { //: public QCustomMenuItem { ddskrjo
       int fontheight;
       QString label;
       virtual QSize sizeHint() { return QSize(80, h); }
-      virtual void paint(QPainter* p, const QColorGroup&, bool /*act*/, bool /*enabled*/, int x, int y, int /*w*/, int h)
+      virtual void paint(QPainter* p, const QColorGroup&, bool act, bool enabled, int x, int y, int w, int h)
             {
             p->fillRect(x+5, y+2, h-4, h-4, QBrush(color));
             p->drawText(x+5 + h - 4 + 3, y+(fontheight * 3) / 4, label);
@@ -90,6 +90,26 @@ class ColorListItem { //: public QCustomMenuItem { ddskrjo
             }
       QString text() const { return QString("PartColor"); }
       };
+*/
+// ORCAN : colorRect does the same job as the above class.
+//         Shall we get rid of the class?
+
+//---------------------------------------------------------
+//   colorRect
+//   paints a rectangular icon with a given color
+//---------------------------------------------------------
+
+QIcon colorRect(const QColor& color, int width, int height) {
+      QPainter painter;
+      QPixmap image(width, height);
+      painter.begin(&image);
+      painter.setBrush(color);
+      QRect rectangle(0, 0, width, height);
+      painter.drawRect(rectangle);
+      painter.end();
+      QIcon icon(image);
+      return icon;
+}
 
 //---------------------------------------------------------
 //   NPart
@@ -702,18 +722,20 @@ void PartCanvas::glueItem(CItem* item)
 //   genItemPopup
 //---------------------------------------------------------
 
-Q3PopupMenu* PartCanvas::genItemPopup(CItem* item)
+QMenu* PartCanvas::genItemPopup(CItem* item)
       {
       NPart* npart = (NPart*) item;
       Track::TrackType trackType = npart->track()->type();
 
-      Q3PopupMenu* partPopup = new Q3PopupMenu(this);
+      QMenu* partPopup = new QMenu(this);
 
-      partPopup->insertItem(*editcutIconSet, tr("C&ut"), 4);
-      partPopup->setAccel(Qt::CTRL+Qt::Key_X, 4);
+      QAction *act_cut = partPopup->addAction(*editcutIconSet, tr("C&ut"));
+      act_cut->setData(4);
+      act_cut->setShortcut(Qt::CTRL+Qt::Key_X);
 
-      partPopup->insertItem(*editcopyIconSet, tr("&Copy"), 5);
-      partPopup->setAccel(Qt::CTRL+Qt::Key_C, 5);
+      QAction *act_copy = partPopup->addAction(*editcopyIconSet, tr("&Copy"));
+      act_copy->setData(5);
+      act_copy->setShortcut(Qt::CTRL+Qt::Key_C);
 
       partPopup->insertSeparator();
       int rc = npart->part()->events()->arefCount();
@@ -721,43 +743,62 @@ Q3PopupMenu* PartCanvas::genItemPopup(CItem* item)
       if(rc > 1)
         st += (QString().setNum(rc) + QString(" "));
       st += QString(tr("clones"));
-      partPopup->insertItem(st, 18);
+      QAction *act_select = partPopup->addAction(st);
+      act_select->setData(18);
       
       partPopup->insertSeparator();
-      partPopup->insertItem(tr("rename"), 0);
-      Q3PopupMenu* colorPopup = new Q3PopupMenu(this);
-      partPopup->insertItem(tr("color"), colorPopup);
+      QAction *act_rename = partPopup->addAction(tr("rename"));
+      act_rename->setData(0);
+      QMenu* colorPopup = new QMenu(tr("color"));
+      partPopup->addMenu(colorPopup);
 
       // part color selection
       const QFontMetrics& fm = colorPopup->fontMetrics();
       int h = fm.lineSpacing();
 
       for (int i = 0; i < NUM_PARTCOLORS; ++i) {
-            ColorListItem* item = new ColorListItem(config.partColors[i], h, fontMetrics().height(), partColorNames[i]);
-            //colorPopup->insertItem(item, 20+i); ddskrjo
+            //ColorListItem* item = new ColorListItem(config.partColors[i], h, fontMetrics().height(), partColorNames[i]); //ddskrjo
+            QAction *act_color = colorPopup->addAction(colorRect(config.partColors[i], 80, 80), partColorNames[i]);
+            act_color->setData(20+i);
             }
 
-      partPopup->insertItem(QIcon(*deleteIcon), tr("delete"), 1); // ddskrjo added QIcon to all
-      partPopup->insertItem(QIcon(*cutIcon), tr("split"),  2);
-      partPopup->insertItem(QIcon(*glueIcon), tr("glue"),   3);
-      partPopup->insertItem(tr("de-clone"), 15);
+      QAction *act_delete = partPopup->addAction(QIcon(*deleteIcon), tr("delete")); // ddskrjo added QIcon to all
+      act_delete->setData(1);
+      QAction *act_split = partPopup->addAction(QIcon(*cutIcon), tr("split"));
+      act_split->setData(2);
+      QAction *act_glue = partPopup->addAction(QIcon(*glueIcon), tr("glue"));
+      act_glue->setData(3);
+      QAction *act_declone = partPopup->addAction(tr("de-clone"));
+      act_declone->setData(15);
 
       partPopup->insertSeparator();
       switch(trackType) {
-            case Track::MIDI:
-                  partPopup->insertItem(QIcon(*pianoIconSet), tr("pianoroll"), 10);
-                  partPopup->insertItem(QIcon(*edit_listIcon), tr("list"), 12);
-                  partPopup->insertItem(tr("export"), 16);
+            case Track::MIDI: {
+                  QAction *act_pianoroll = partPopup->addAction(QIcon(*pianoIconSet), tr("pianoroll"));
+                  act_pianoroll->setData(10);
+                  QAction *act_mlist = partPopup->addAction(QIcon(*edit_listIcon), tr("list"));
+       	          act_mlist->setData(12);
+                  QAction *act_mexport = partPopup->addAction(tr("export"));
+                  act_mexport->setData(16);
+                  }
                   break;
-            case Track::DRUM:
-                  partPopup->insertItem(QIcon(*edit_listIcon), tr("list"), 12);
-                  partPopup->insertItem(QIcon(*edit_drummsIcon), tr("drums"), 13);
-                  partPopup->insertItem(tr("export"), 16);
+            case Track::DRUM: {
+                  QAction *act_dlist = partPopup->addAction(QIcon(*edit_listIcon), tr("list"));
+                  act_dlist->setData(12);
+                  QAction *act_drums = partPopup->addAction(QIcon(*edit_drummsIcon), tr("drums"));
+                  act_drums->setData(13);
+                  QAction *act_dexport = partPopup->addAction(tr("export"));
+                  act_dexport->setData(16);
+                  }
                   break;
-            case Track::WAVE:
-                  partPopup->insertItem(QIcon(*edit_waveIcon), tr("wave edit"), 14);
-                  partPopup->insertItem(tr("export"), 16);
-                  partPopup->insertItem(tr("file info"), 17);
+            case Track::WAVE: {
+                  QAction *act_wedit = partPopup->addAction(QIcon(*edit_waveIcon), tr("wave edit"));
+                  act_wedit->setData(14);
+                  QAction *act_wexport = partPopup->addAction(tr("export"));
+                  act_wexport->setData(16);
+                  QAction *act_wfinfo = partPopup->addAction(tr("file info"));
+                  act_wfinfo->setData(17);
+                  }
                   break;
             case Track::AUDIO_OUTPUT:
             case Track::AUDIO_INPUT:
diff --git a/muse2/muse/arranger/pcanvas.h b/muse2/muse/arranger/pcanvas.h
index b8f133fe..8ce464a5 100644
--- a/muse2/muse/arranger/pcanvas.h
+++ b/muse2/muse/arranger/pcanvas.h
@@ -16,7 +16,6 @@
 #include <QDropEvent>
 #include <QDragLeaveEvent>
 #include <QMouseEvent>
-#include <Q3PopupMenu>
 #include <QKeyEvent>
 #include <QEvent>
 #include <QDragEnterEvent>
@@ -39,7 +38,7 @@ class NPart : public CItem {
 
 class QLineEdit;
 class MidiEditor;
-class Q3PopupMenu;
+class QMenu;
 class Xml;
 
 //---------------------------------------------------------
@@ -88,7 +87,7 @@ class PartCanvas : public Canvas {
       virtual void dragLeaveEvent(QDragLeaveEvent*);
       virtual void viewDropEvent(QDropEvent*);
 
-      virtual Q3PopupMenu* genItemPopup(CItem*);
+      virtual QMenu* genItemPopup(CItem*);
       virtual void itemPopup(CItem*, int, const QPoint&);
 
       void glueItem(CItem* item);
diff --git a/muse2/muse/widgets/canvas.cpp b/muse2/muse/widgets/canvas.cpp
index ef5ee0de..58187304 100644
--- a/muse2/muse/widgets/canvas.cpp
+++ b/muse2/muse/widgets/canvas.cpp
@@ -539,9 +539,9 @@ void Canvas::viewMousePressEvent(QMouseEvent* event)
                   else {
                         itemPopupMenu = genItemPopup(curItem);
                         if (itemPopupMenu) {
-                              int n = itemPopupMenu->exec(QCursor::pos());
-                              if (n != -1)
-                                    itemPopup(curItem, n, start);
+                              QAction *act = itemPopupMenu->exec(QCursor::pos());
+                              if (act)
+                                    itemPopup(curItem, act->data().toInt(), start);
                               delete itemPopupMenu;
                               }
                         }
@@ -549,9 +549,9 @@ void Canvas::viewMousePressEvent(QMouseEvent* event)
             else {
                   canvasPopupMenu = genCanvasPopup();
                   if (canvasPopupMenu) {
-                        int n = canvasPopupMenu->exec(QCursor::pos(), 0);
-                        if (n != -1)
-                              canvasPopup(n);
+                        QAction *act = canvasPopupMenu->exec(QCursor::pos(), 0);
+                        if (act)
+                              canvasPopup(act->data().toInt());
                         delete canvasPopupMenu;
                         }
                   }
@@ -1370,16 +1370,17 @@ int Canvas::selectionSize()
 //   genCanvasPopup
 //---------------------------------------------------------
 
-Q3PopupMenu* Canvas::genCanvasPopup()
+QMenu* Canvas::genCanvasPopup()
       {
       if (canvasTools == 0)
             return 0;
-      Q3PopupMenu* canvasPopup = new Q3PopupMenu(this);
+      QMenu* canvasPopup = new QMenu(this);
 
       for (unsigned i = 0; i < 9; ++i) {
             if ((canvasTools & (1 << i))==0)
                   continue;
-            canvasPopup->insertItem(QIcon(**toolList[i].icon), tr(toolList[i].tip), 1<<i); // ddskrjo
+            QAction* act = canvasPopup->addAction(QIcon(**toolList[i].icon), tr(toolList[i].tip));
+	    act->setData(1<<i); // ddskrjo
             }
       canvasPopup->setActiveItem(0);
       return canvasPopup;
diff --git a/muse2/muse/widgets/canvas.h b/muse2/muse/widgets/canvas.h
index f25d1b2f..d4476df8 100644
--- a/muse2/muse/widgets/canvas.h
+++ b/muse2/muse/widgets/canvas.h
@@ -14,10 +14,9 @@
 //Added by qt3to4:
 #include <QWheelEvent>
 #include <QMouseEvent>
-#include <Q3PopupMenu>
 #include <QKeyEvent>
 
-class Q3PopupMenu;
+class QMenu;
 
 //---------------------------------------------------------
 //   Canvas
@@ -75,8 +74,8 @@ class Canvas : public View {
       HScrollDir hscrollDir;
       VScrollDir vscrollDir;
       int keyState;
-      Q3PopupMenu* itemPopupMenu;
-      Q3PopupMenu* canvasPopupMenu;
+      QMenu* itemPopupMenu;
+      QMenu* canvasPopupMenu;
 
       void setCursor();
       virtual void viewKeyPressEvent(QKeyEvent* event);
@@ -118,7 +117,7 @@ class Canvas : public View {
          \param item The canvas item that is rightclicked
          \return A QPopupMenu*
          */
-      virtual Q3PopupMenu* genItemPopup(CItem* /*item*/) { return 0; }
+      virtual QMenu* genItemPopup(CItem* /*item*/) { return 0; }
 
       /*!
          \brief Pure virtual member
@@ -126,7 +125,7 @@ class Canvas : public View {
          Implementing class is responsible for creating a popup to be shown when the user rightclicks an empty region of the canvas
          \return A QPopupMenu*
          */
-      Q3PopupMenu* genCanvasPopup();
+      QMenu* genCanvasPopup();
 
       /*!
          \brief Virtual member
-- 
cgit v1.2.3