Author: mir3x
Date: Wed Sep 24 21:31:02 2014
New Revision: 26570

URL: http://svn.gna.org/viewcvs/freeciv?rev=26570&view=rev
Log:
Added 4 buttons to worklist ( add, move current production up, move down, 
delete ) 

See patch #5270


Modified:
    trunk/client/gui-qt/citydlg.cpp
    trunk/client/gui-qt/citydlg.h

Modified: trunk/client/gui-qt/citydlg.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/citydlg.cpp?rev=26570&r1=26569&r2=26570&view=diff
==============================================================================
--- trunk/client/gui-qt/citydlg.cpp     (original)
+++ trunk/client/gui-qt/citydlg.cpp     Wed Sep 24 21:31:02 2014
@@ -804,7 +804,20 @@
     QGroupBox *group_box = new QGroupBox(_("Worklist Option"));
     QGridLayout *qgrid = new QGridLayout;
     QPushButton *but2 = new QPushButton;
-
+    QHBoxLayout *work_but_layout = new QHBoxLayout;
+    work_next_but = new QPushButton(style()->
+                                    standardIcon(QStyle::SP_ArrowDown), "");
+    work_prev_but = new QPushButton(style()->
+                                    standardIcon(QStyle::SP_ArrowUp), "");
+    work_add_but = new QPushButton();
+    work_add_but->setIcon(QIcon(*(get_arrow_sprite(tileset,
+                                                   ARROW_PLUS)->pm)));
+    work_rem_but = new QPushButton(style()->standardIcon(
+                                   QStyle::SP_DialogDiscardButton), "");
+    work_but_layout->addWidget(work_add_but);
+    work_but_layout->addWidget(work_next_but);
+    work_but_layout->addWidget(work_prev_but);
+    work_but_layout->addWidget(work_rem_but);
     but_menu_worklist = new QPushButton;
     item_button_p = new QPushButton;
 
@@ -832,11 +845,11 @@
     r3 = new QRadioButton(_("Insert After"));
     r4 = new QRadioButton(_("Add Last"));
     r4->setChecked(true);
+    vbox->addLayout(work_but_layout);
     vbox->addWidget(r1);
     vbox->addWidget(r2);
     vbox->addWidget(r3);
     vbox->addWidget(r4);
-    vbox->addStretch(1);
     group_box->setLayout(vbox);
 
     p_table_p->setColumnCount(3);
@@ -903,6 +916,10 @@
     connect(buy_button_p, SIGNAL(clicked()), SLOT(buy()));
     connect(production_combo_p, SIGNAL(clicked()),
             SLOT(show_targets_worklist()));
+    connect(work_add_but, SIGNAL(clicked()), SLOT(show_targets_worklist()));
+    connect(work_prev_but, SIGNAL(clicked()), SLOT(worklist_up()));
+    connect(work_next_but, SIGNAL(clicked()), SLOT(worklist_down()));
+    connect(work_rem_but, SIGNAL(clicked()), SLOT(worklist_del()));
     connect(item_button_p, SIGNAL(clicked()),
             SLOT(show_targets()));
     connect(p_table_p,
@@ -1129,8 +1146,35 @@
   } else  {
     cma_enable_but->setDisabled(true);
   }
-}
-
+  update_prod_buttons();
+}
+
+/****************************************************************************
+  Update sensitivity of buttons in production tab
+****************************************************************************/
+void city_dialog::update_prod_buttons()
+{
+  work_next_but->setDisabled(true);
+  work_prev_but->setDisabled(true);
+  work_add_but->setDisabled(true);
+  work_rem_but->setDisabled(true);
+  if (client.conn.playing && city_owner(pcity) == client.conn.playing) {
+    work_add_but->setEnabled(true);
+    if (selected_row_p >= 0 && selected_row_p < p_table_p->rowCount()) {
+      work_rem_but->setEnabled(true);
+    }
+    if (selected_row_p >= 0 && selected_row_p < p_table_p->rowCount() - 1) {
+      work_next_but->setEnabled(true);
+    }
+    if (selected_row_p > 0 && selected_row_p < p_table_p->rowCount()) {
+      work_prev_but->setEnabled(true);
+    }
+  }
+}
+
+/****************************************************************************
+  City dialog destructor
+****************************************************************************/
 city_dialog::~city_dialog()
 {
   if (citizen_pixmap) {
@@ -1986,6 +2030,7 @@
   }
   index = indexes.at(0);
   selected_row_p = index.row();
+  update_prod_buttons();
 }
 
 /****************************************************************************
@@ -2326,6 +2371,68 @@
   }
   worklist_init(&empty);
   city_set_worklist(pcity, &empty);
+}
+
+/****************************************************************************
+  Move current item on worklist up
+****************************************************************************/
+void city_dialog::worklist_up()
+{
+  QModelIndex index;
+  struct worklist queue;
+  struct universal *target = new universal;
+  QVariant qvar;
+
+  if (selected_row_p < 1 || selected_row_p >= p_table_p->rowCount()) {
+    return;
+  }
+  city_get_queue(pcity, &queue);
+  worklist_peek_ith(&queue, target, selected_row_p);
+  worklist_remove(&queue, selected_row_p);
+  worklist_insert(&queue, *target, selected_row_p - 1);
+  city_set_queue(pcity, &queue);
+  index = p_table_p->model()->index(selected_row_p - 1, 0);
+  p_table_p->setCurrentIndex(index);
+  delete target;
+
+}
+
+/****************************************************************************
+  Remove current item on worklist
+****************************************************************************/
+void city_dialog::worklist_del()
+{
+  QTableWidgetItem *item;
+  if (selected_row_p < 0 
+      || selected_row_p >= p_table_p->rowCount()) {
+    return;
+  }
+  item = p_table_p->item(selected_row_p, 0);
+  dbl_click_p(item);
+  update_prod_buttons();
+}
+
+/****************************************************************************
+  Move current item on worklist down
+****************************************************************************/
+void city_dialog::worklist_down()
+{
+  QModelIndex index;
+  struct worklist queue;
+  struct universal *target = new universal;
+  QVariant qvar;
+
+  if (selected_row_p < 0 || selected_row_p >= p_table_p->rowCount() - 1 ) {
+    return;
+  }
+  city_get_queue(pcity, &queue);
+  worklist_peek_ith(&queue, target, selected_row_p);
+  worklist_remove(&queue, selected_row_p);
+  worklist_insert(&queue, *target, selected_row_p + 1);
+  city_set_queue(pcity, &queue);
+  index = p_table_p->model()->index(selected_row_p + 1, 0);
+  p_table_p->setCurrentIndex(index);
+  delete target;
 }
 
 /****************************************************************************

Modified: trunk/client/gui-qt/citydlg.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/citydlg.h?rev=26570&r1=26569&r2=26570&view=diff
==============================================================================
--- trunk/client/gui-qt/citydlg.h       (original)
+++ trunk/client/gui-qt/citydlg.h       Wed Sep 24 21:31:02 2014
@@ -337,6 +337,10 @@
   QPushButton *cma_enable_but;
   QPushButton *next_city_but;
   QPushButton *prev_city_but;
+  QPushButton *work_next_but;
+  QPushButton *work_prev_but;
+  QPushButton *work_add_but;
+  QPushButton *work_rem_but;
   QPushButton *but_menu_worklist;
   QPixmap *citizen_pixmap;
   unit_info *current_units;
@@ -368,6 +372,7 @@
   void update_cma_tab();
   void update_disabled();
   void update_sliders();
+  void update_prod_buttons();
 
 private slots:
   void next_city();
@@ -382,6 +387,9 @@
   void item_selected(const QItemSelection &sl, const QItemSelection &ds);
   void clear_worklist();
   void save_worklist();
+  void worklist_up();
+  void worklist_down();
+  void worklist_del();
   void display_worklist_menu(const QPoint &p);
   void disband_state_changed(int state);
   void update_results_text();


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to