Skip to content

Commit 534cff6

Browse files
committed
Possibility to configure a category for nodes (routers, switches, end devices or security devices).
1 parent 90067a2 commit 534cff6

16 files changed

+126
-35
lines changed

gns3/dialogs/symbol_selection_dialog.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from ..qt import QtSvg, QtCore, QtGui
2323
from ..ui.symbol_selection_dialog_ui import Ui_SymbolSelectionDialog
24+
from ..node import Node
2425

2526

2627
class SymbolSelectionDialog(QtGui.QDialog, Ui_SymbolSelectionDialog):
@@ -42,6 +43,19 @@ def __init__(self, parent, items=None):
4243
if not self._items:
4344
self.uiButtonBox.button(QtGui.QDialogButtonBox.Apply).hide()
4445

46+
# current categories
47+
categories = {"Routers": Node.routers,
48+
"Switches": Node.switches,
49+
"End devices": Node.end_devices,
50+
"Security devices": Node.security_devices
51+
}
52+
53+
for name, category in categories.items():
54+
self.uiCategoryComboBox.addItem(name, category)
55+
else:
56+
self.uiCategoryLabel.hide()
57+
self.uiCategoryComboBox.hide()
58+
4559
self.uiSymbolListWidget.setIconSize(QtCore.QSize(64, 64))
4660
symbol_resources = QtCore.QResource(":/symbols")
4761
for symbol in symbol_resources.children():
@@ -78,6 +92,10 @@ def getSymbols(self):
7892
selected_symbol = ":/symbols/{}.selected.svg".format(name)
7993
return normal_symbol, selected_symbol
8094

95+
def getCategory(self):
96+
97+
return self.uiCategoryComboBox.itemData(self.uiCategoryComboBox.currentIndex())
98+
8199
def done(self, result):
82100
"""
83101
Called when the dialog is closed.

gns3/modules/dynamips/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121

2222
import os
2323
import glob
24+
2425
from gns3.qt import QtCore, QtGui
2526
from gns3.servers import Servers
27+
from gns3.node import Node
28+
2629
from ..module import Module
2730
from ..module_error import ModuleError
2831
from .nodes.router import Router
@@ -120,6 +123,7 @@ def _loadIOSRouters(self):
120123
private_config = settings.value("private_config", "")
121124
default_symbol = settings.value("default_symbol", ":/symbols/router.normal.svg")
122125
hover_symbol = settings.value("hover_symbol", ":/symbols/router.selected.svg")
126+
category = settings.value("category", Node.routers, type=int)
123127
platform = settings.value("platform", "")
124128
chassis = settings.value("chassis", "")
125129
idlepc = settings.value("idlepc", "")
@@ -141,6 +145,7 @@ def _loadIOSRouters(self):
141145
"image": image,
142146
"default_symbol": default_symbol,
143147
"hover_symbol": hover_symbol,
148+
"category": category,
144149
"startup_config": startup_config,
145150
"private_config": private_config,
146151
"platform": platform,
@@ -640,9 +645,9 @@ def nodes(self):
640645
{"class": node_class.__name__,
641646
"name": ios_router["name"],
642647
"server": ios_router["server"],
643-
"categories": node_class.categories(),
644648
"default_symbol": ios_router["default_symbol"],
645-
"hover_symbol": ios_router["hover_symbol"]}
649+
"hover_symbol": ios_router["hover_symbol"],
650+
"categories": [ios_router["category"]]}
646651
)
647652

648653
return nodes

gns3/modules/dynamips/pages/ios_router_preferences_page.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import zipfile
2929

3030
from gns3.qt import QtCore, QtGui
31+
from gns3.node import Node
3132
from gns3.main_window import MainWindow
3233
from gns3.utils.progress_dialog import ProgressDialog
3334
from gns3.dialogs.symbol_selection_dialog import SymbolSelectionDialog
@@ -113,6 +114,7 @@ def _iosRouterNewSlot(self):
113114
"image": ios_settings["image"],
114115
"default_symbol": ":/symbols/router.normal.svg",
115116
"hover_symbol": ":/symbols/router.selected.svg",
117+
"category": Node.routers,
116118
"startup_config": startup_config,
117119
"private_config": private_config,
118120
"platform": ios_settings["platform"],
@@ -459,13 +461,15 @@ def _changeSymbolSlot(self):
459461
dialog.show()
460462
if dialog.exec_():
461463
normal_symbol, selected_symbol = dialog.getSymbols()
464+
category = dialog.getCategory()
462465
item = self.uiIOSRoutersTreeWidget.currentItem()
463466
if item:
464467
item.setIcon(0, QtGui.QIcon(normal_symbol))
465468
key = item.data(0, QtCore.Qt.UserRole)
466469
ios_router = self._ios_routers[key]
467470
ios_router["default_symbol"] = normal_symbol
468471
ios_router["hover_symbol"] = selected_symbol
472+
ios_router["category"] = category
469473

470474
def loadPreferences(self):
471475
"""

gns3/modules/iou/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121

2222
import base64
2323
import os
24+
2425
from gns3.qt import QtCore, QtGui
25-
from gns3.servers import Servers
26+
from gns3.node import Node
27+
2628
from ..module import Module
2729
from ..module_error import ModuleError
2830
from .iou_device import IOUDevice
@@ -92,6 +94,7 @@ def _loadIOUDevices(self):
9294
name = settings.value("name", "IOU{}".format(index + 1))
9395
default_symbol = settings.value("default_symbol", ":/symbols/multilayer_switch.normal.svg")
9496
hover_symbol = settings.value("hover_symbol", ":/symbols/multilayer_switch.selected.svg")
97+
category = settings.value("category", Node.routers, type=int)
9598
path = settings.value("path", "")
9699
image = settings.value("image", "")
97100
initial_config = settings.value("initial_config", "")
@@ -106,6 +109,7 @@ def _loadIOUDevices(self):
106109
"path": path,
107110
"default_symbol": default_symbol,
108111
"hover_symbol": hover_symbol,
112+
"category": category,
109113
"image": image,
110114
"initial_config": initial_config,
111115
"use_default_iou_values": use_default_iou_values,
@@ -530,9 +534,10 @@ def nodes(self):
530534
{"class": IOUDevice.__name__,
531535
"name": iou_device["name"],
532536
"server": iou_device["server"],
533-
"categories": IOUDevice.categories(),
534537
"default_symbol": iou_device["default_symbol"],
535-
"hover_symbol": iou_device["hover_symbol"]}
538+
"hover_symbol": iou_device["hover_symbol"],
539+
"categories": [iou_device["category"]]
540+
}
536541
)
537542
return nodes
538543

gns3/modules/iou/dialogs/iou_device_wizard.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
"""
2121

2222
import os
23-
import re
2423
import sys
2524
import pkg_resources
2625

2726
from gns3.qt import QtGui
27+
from gns3.node import Node
2828
from gns3.servers import Servers
2929

3030
from ..ui.iou_device_wizard_ui import Ui_IOUDeviceWizard
@@ -154,6 +154,7 @@ def getSettings(self):
154154
initial_config = os.path.normpath(iou_base_config_path)
155155
default_symbol = ":/symbols/multilayer_switch.normal.svg"
156156
hover_symbol = ":/symbols/multilayer_switch.selected.svg"
157+
category = Node.switches
157158
else:
158159
# set the default L3 base initial-config
159160
resource_name = "configs/iou_l3_base_initial-config.txt"
@@ -164,6 +165,7 @@ def getSettings(self):
164165
initial_config = os.path.normpath(iou_base_config_path)
165166
default_symbol = ":/symbols/router.normal.svg"
166167
hover_symbol = ":/symbols/router.selected.svg"
168+
category = Node.routers
167169

168170
if IOU.instance().settings()["use_local_server"] or self.uiLoadBalanceCheckBox.isChecked():
169171
server = "local"
@@ -182,6 +184,7 @@ def getSettings(self):
182184
"image": os.path.basename(path),
183185
"initial_config": initial_config,
184186
"default_symbol": default_symbol,
187+
"category": category,
185188
"hover_symbol": hover_symbol,
186189
"server": server,
187190
}

gns3/modules/iou/pages/iou_device_preferences_page.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,24 @@ def _iouDeviceNewSlot(self):
8585
wizard.show()
8686
if wizard.exec_():
8787

88-
new_vm_settings = wizard.getSettings()
89-
90-
key = "{server}:{name}".format(server=new_vm_settings["server"], name=new_vm_settings["name"])
91-
self._iou_devices[key] = {"name": new_vm_settings["name"],
92-
"path": new_vm_settings["path"],
93-
"default_symbol": new_vm_settings["default_symbol"],
94-
"hover_symbol": new_vm_settings["hover_symbol"],
95-
"image": os.path.basename(new_vm_settings["path"]),
96-
"initial_config": new_vm_settings["initial_config"],
88+
new_device_settings = wizard.getSettings()
89+
90+
key = "{server}:{name}".format(server=new_device_settings["server"], name=new_device_settings["name"])
91+
self._iou_devices[key] = {"name": new_device_settings["name"],
92+
"path": new_device_settings["path"],
93+
"default_symbol": new_device_settings["default_symbol"],
94+
"hover_symbol": new_device_settings["hover_symbol"],
95+
"category": new_device_settings["category"],
96+
"image": os.path.basename(new_device_settings["path"]),
97+
"initial_config": new_device_settings["initial_config"],
9798
"use_default_iou_values": True,
9899
"ram": 256,
99100
"nvram": 128,
100101
"ethernet_adapters": 2,
101102
"serial_adapters": 2,
102-
"server": new_vm_settings["server"]}
103+
"server": new_device_settings["server"]}
103104

104-
self._iou_devices[key].update(new_vm_settings)
105+
self._iou_devices[key].update(new_device_settings)
105106
item = QtGui.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
106107
item.setText(0, self._iou_devices[key]["name"])
107108
item.setIcon(0, QtGui.QIcon(self._iou_devices[key]["default_symbol"]))
@@ -324,13 +325,15 @@ def _changeSymbolSlot(self):
324325
dialog.show()
325326
if dialog.exec_():
326327
normal_symbol, selected_symbol = dialog.getSymbols()
328+
category = dialog.getCategory()
327329
item = self.uiIOUDevicesTreeWidget.currentItem()
328330
if item:
329331
item.setIcon(0, QtGui.QIcon(normal_symbol))
330332
key = item.data(0, QtCore.Qt.UserRole)
331333
iou_device = self._iou_devices[key]
332334
iou_device["default_symbol"] = normal_symbol
333335
iou_device["hover_symbol"] = selected_symbol
336+
iou_device["category"] = category
334337

335338
def loadPreferences(self):
336339
"""

gns3/modules/iou/pages/iou_preferences_page.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121

2222
import os
2323
import sys
24+
2425
from gns3.qt import QtCore, QtGui
2526
from gns3.servers import Servers
27+
2628
from .. import IOU
2729
from ..ui.iou_preferences_page_ui import Ui_IOUPreferencesPageWidget
2830
from ..settings import IOU_SETTINGS

gns3/modules/qemu/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
"""
2121

2222
import os
23+
2324
from gns3.qt import QtCore, QtGui
24-
from gns3.servers import Servers
25+
from gns3.node import Node
26+
2527
from ..module import Module
2628
from ..module_error import ModuleError
2729
from .qemu_vm import QemuVM
@@ -91,6 +93,7 @@ def _loadQemuVMs(self):
9193
name = settings.value("name", "")
9294
default_symbol = settings.value("default_symbol", ":/symbols/qemu_guest.normal.svg")
9395
hover_symbol = settings.value("hover_symbol", ":/symbols/qemu_guest.selected.svg")
96+
category = settings.value("category", Node.end_devices, type=int)
9497
qemu_path = settings.value("qemu_path", "")
9598
hda_disk_image = settings.value("hda_disk_image", "")
9699
hdb_disk_image = settings.value("hdb_disk_image", "")
@@ -108,6 +111,7 @@ def _loadQemuVMs(self):
108111
self._qemu_vms[key] = {"name": name,
109112
"default_symbol": default_symbol,
110113
"hover_symbol": hover_symbol,
114+
"category": category,
111115
"qemu_path": qemu_path,
112116
"hda_disk_image": hda_disk_image,
113117
"hdb_disk_image": hdb_disk_image,
@@ -511,9 +515,10 @@ def nodes(self):
511515
{"class": QemuVM.__name__,
512516
"name": qemu_vm["name"],
513517
"server": qemu_vm["server"],
514-
"categories": QemuVM.categories(),
515518
"default_symbol": qemu_vm["default_symbol"],
516-
"hover_symbol": qemu_vm["hover_symbol"]}
519+
"hover_symbol": qemu_vm["hover_symbol"],
520+
"categories": [qemu_vm["category"]]
521+
}
517522
)
518523
return nodes
519524

gns3/modules/qemu/dialogs/qemu_vm_wizard.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
from gns3.qt import QtCore, QtGui
2626
from gns3.servers import Servers
27+
from gns3.node import Node
2728
from gns3.main_window import MainWindow
2829
from gns3.modules.module_error import ModuleError
2930
from gns3.utils.connect_to_server import ConnectToServer
@@ -266,15 +267,18 @@ def getSettings(self):
266267
settings["options"] = "-nographic -cpu coreduo -icount auto -hdachs 980,16,32"
267268
settings["default_symbol"] = ":/symbols/asa.normal.svg"
268269
settings["hover_symbol"] = ":/symbols/asa.selected.svg"
270+
settings["category"] = Node.security_devices
269271
elif self.uiTypeComboBox.currentText() == "IDS":
270272
settings["adapters"] = 3
271273
settings["hda_disk_image"] = self.uiHdaDiskImageLineEdit.text()
272274
settings["hdb_disk_image"] = self.uiHdbDiskImageLineEdit.text()
273275
settings["options"] = "-smbios type=1,product=IDS-4215"
274276
settings["default_symbol"] = ":/symbols/ids.normal.svg"
275277
settings["hover_symbol"] = ":/symbols/ids.selected.svg"
278+
settings["category"] = Node.security_devices
276279
else:
277280
settings["hda_disk_image"] = self.uiHdaDiskImageLineEdit.text()
281+
settings["category"] = Node.end_devices
278282

279283
return settings
280284

gns3/modules/qemu/pages/qemu_vm_preferences_page.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@
2323
import copy
2424

2525
from gns3.qt import QtCore, QtGui
26-
from gns3.servers import Servers
26+
from gns3.node import Node
2727
from gns3.main_window import MainWindow
28-
from gns3.modules.module_error import ModuleError
2928
from gns3.dialogs.symbol_selection_dialog import SymbolSelectionDialog
3029
from gns3.dialogs.configuration_dialog import ConfigurationDialog
3130

@@ -143,6 +142,7 @@ def _qemuVMNewSlot(self):
143142
self._qemu_vms[key] = {"name": "",
144143
"default_symbol": ":/symbols/qemu_guest.normal.svg",
145144
"hover_symbol": ":/symbols/qemu_guest.selected.svg",
145+
"category": Node.end_devices,
146146
"qemu_path": "default",
147147
"hda_disk_image": "",
148148
"hdb_disk_image": "",
@@ -223,13 +223,15 @@ def _changeSymbolSlot(self):
223223
dialog.show()
224224
if dialog.exec_():
225225
normal_symbol, selected_symbol = dialog.getSymbols()
226+
category = dialog.getCategory()
226227
item = self.uiQemuVMsTreeWidget.currentItem()
227228
if item:
228229
item.setIcon(0, QtGui.QIcon(normal_symbol))
229230
key = item.data(0, QtCore.Qt.UserRole)
230231
qemu_vm = self._qemu_vms[key]
231232
qemu_vm["default_symbol"] = normal_symbol
232233
qemu_vm["hover_symbol"] = selected_symbol
234+
qemu_vm["category"] = category
233235

234236
def loadPreferences(self):
235237
"""

0 commit comments

Comments
 (0)